题干
魔术索引。 在数组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));
}
}