LeetCode 1064. Fixed Point 2019-08-16

题目描述

给定已经按升序排列、由不同整数组成的数组 A,返回满足 A[i] == i 的最小索引 i。如果不存在这样的 i,返回 -1。

1 <= A.length < 10^4
-10^9 <= A[i] <= 10^9

tag

二分

样例

1
2
3
4
输入:[-10,-5,0,3,7]
输出:3
解释:
对于给定的数组,A[0] = -10,A[1] = -5,A[2] = 0,A[3] = 3,因此输出为 3 。

算法1

(二分) O(logn)
思路
复杂度分析:
python 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution:
def fixedPoint(self, A: List[int]) -> int:
left = 0
right = len(A) - 1

while left < right:

mid = (left + right) // 2

if A[mid] >= mid:
right = mid
else:
left = mid + 1

if A[left] == left:
return left
return -1