LeetCode——面试题08.0魔术索引

魔术索引

  • 题目
  • 思路
  • 代码
  • 结果
  • 总结

题目

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

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

思路

找出最小的那一个,直接从左往右遍历一遍,找到第一个索引就可以直接break了;

代码

class Solution {
    public int findMagicIndex(int[] nums) {
        int  length=nums.length;
        int index=-1;
        for (int i=0;i<length;++i)
            if (nums[i]==i)
            {
                index=i;
                break;
            }
        return index;
    }
}

结果

LeetCode——面试题08.0魔术索引_第1张图片
虽然执行结果0ms,但是就是因为测试例子太少了,或者数据不够充分大,这种方法太暴力

总结

本来想用二分法的,但是到了最后,发现说明里面说有可能会出现重复元素,那这样子,二分法就失效了。

如果序列为单调递增序列而且没有重复元素,那么使用二分法可以到达log(n)的速度,但是题目里面有重复元素,所以就不行了

官方题解也是递归遍历,看起来,代码似乎还没有直接暴力循环来得快!

你可能感兴趣的:(LeetCode)