面试题 08.03. 魔术索引

Easy

方法一(暴力)

思路

暴力解法思路比较清晰:遍历数组,遇到索引和值相同的情况返回

代码

python3

class Solution:
  def findMagicIndex(self, nums: List[int]) -> int:
    for i,v in enumerate(nums):
      if i == v:
        return i
    return -1

方法二(分治,DFS)

思路

应为数组是有序的,我们想到能不能用二分方法去做。

最坏情况也是\(O(n)\)

以上,尝试写一下代码,AC!

代码

python3

class Solution:
  def helper(self,start,end,nums):
    if start > end:
      return -1
    mid = start + (end-start) // 2
    if mid == nums[mid]:
      return mid
    l_res = self.helper(start,mid-1,nums)
    if l_res == -1:
      return self.helper(mid+1,end,nums)  
    else:
      return l_res 
  def findMagicIndex(self, nums: List[int]) -> int:
    return self.helper(0, len(nums)-1, nums)