• 刷题力扣面试题 08.03. 魔术索引


    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/magic-index-lcci
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目描述

    魔术索引。 在数组A[0...n-1]中,有所谓的魔术索引,满足条件A[i] = i。给定一个有序整数数组,编写一种方法找出魔术索引,若有的话,在数组A中找出一个魔术索引,如果没有,则返回-1。若有多个魔术索引,返回索引值最小的一个。

    示例1:

     输入:nums = [0, 2, 3, 4, 5]
     输出:0
     说明: 0下标的元素为0
    

    示例2:

     输入:nums = [1, 1, 1]
     输出:1
    

    说明:

    • nums长度在[1, 1000000]之间
    • 此题为原书中的 Follow-up,即数组中可能包含重复元素的版本

    题目分析

    1. 根据题目描述,有一些前提没有描述出来,数组中元素是非递减排序
    2. 查找最小的魔术索引,如存在多个魔术索引,那么最小的魔术索引是第一个出现的魔术索引
    3. 魔术索引的左侧的值小于索引,右侧的值大于索引
    4. 假设nums[2]=5,可以说明索引为3、4的值都不等于5,故可以省去一些判断
    5. 当nums[i]=j,切i<j,可令i=j

    代码

    class Solution {
    public:
        int findMagicIndex(vector<int>& nums) {
            // 数组中元素非递减,如存在魔术索引,那第一个出现的魔术索引最小
            int i = 0;
            while (i < nums.size()) {
                if (i == nums[i]) { return i; }
                else if (i < nums[i]) { i = nums[i];}
                else { ++i; }
            }
            return -1;
        }
    };
    
  • 相关阅读:
    机器视觉行业分析
    lua sample code analysis
    My GPU info from "GPU Caps Viewer"
    网页hack程序编写
    debug redmine send email
    如何下载web资源
    看国内网络电视解决方案2
    看国内网络电视解决方案
    babel-polyfill使用与性能优化
    升级NGINX支持HTTP/2服务端推送
  • 原文地址:https://www.cnblogs.com/HanYG/p/15919211.html
Copyright © 2020-2023  润新知