leetcode【每日一题】面试题 08.03. 魔术索引 Java

题干

魔术索引。 在数组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]之间

想法

遍历数组
nums[index]==index
现在位置值等于对应数组位置的值,返回

现在位置值小于对应数组位置的值,由于数组有序,递减的话肯定不行了
如果递增的话,显然
可以跳跃一下,将新的index令为nums[index]
因为升序且前一个数比坐标大,那后一个数在不等的情况下也比坐标大

于是可以简化时间复杂度

Java代码

package daily;

public class FindMagicIndex {
    public int findMagicIndex(int[] nums) {
     int index=0,len=nums.length;
     while(index<len){
         if(nums[index]==index){
             return  index;
         }
        else if (nums[index]>index) {
             index=nums[index];
         }
        else {
            index++;
         }
     }
     return  -1;
    }

    public static  void main(String[] args){
        int []nums = {0, 2, 3, 4, 5};
        FindMagicIndex findMagicIndex=new FindMagicIndex();
        System.out.println(findMagicIndex.findMagicIndex(nums));
    }
}

我的leetcode代码都已经上传到我的githttps://github.com/ragezor/leetcode

猜你喜欢

转载自blog.csdn.net/qq_43491066/article/details/107706728
今日推荐