本文旨在对于个人知识的梳理以及知识的分享,如果有不足的地方,欢迎大家在评论区指出
题目描述
魔术索引。 在数组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 0 6 10^6 106,这个量级一般要求的复杂度为 O ( n ) O(n) O(n)或者 O ( n l o g n ) O(nlogn) O(nlogn),思路的话就是遍历一遍,当当前数字的下标与其数值相等时,返回即可,因为题目要求的是第一个
解题代码
Python
class Solution:
def findMagicIndex(self, nums: List[int]) -> int:
for i in range(len(nums)):
if i == nums[i]:
return i
return -1
Java
class Solution {
public int findMagicIndex(int[] nums) {
int n = nums.length;
for(int i=0; i<n; i++){
if(i == nums[i]) return i;
}
return -1;
}
}