1、题目描述:
2、题解:
方法1:暴力法:
一次遍历,如果 i==nums[i],则返回i;遍历结束,如果都没有找到,则返回-1
class Solution:
def findMagicIndex(self, nums: List[int]) -> int:
#暴力法
n = len(nums)
for i in range(n):
if i == nums[i]:
return i
return -1
方法2:二分查找:
思路:
DFS中的中序遍历+剪枝:先看mid的左边,如果找到,就返回,然后看nums[mid] == mid的话返回mid,然后再看mid
的右边是否能找到。
Python代码如下:
class Solution:
def findMagicIndex(self, nums: List[int]) -> int:
#二分查找
return self.find(nums,0,len(nums) - 1)
def find(self,nums,left,right):
if left > right:return -1
mid = left + (right - left) // 2
temp = self.find(nums,left,mid - 1)
if temp != -1:
return temp
elif nums[mid] == mid:
return mid
return self.find(nums,mid + 1,right)
3、复杂度分析:
方法1:
时间复杂度:O(N)
空间复杂度:O(1)
方法2:
时间复杂度:O(logN)
空间复杂度:O(1)