Given an array of distinct integers arr, where arr is sorted in
ascending order , return the smallest index i that satisfies arr[i] == i. If there is no such index, return -1.
classSolution {
public:int fixedPoint(vector<int>& arr) {
int l =0, r = arr.size() -1, ans =-1;
while (l <= r) {
int m = l + (r - l) /2;
if (arr[m] == m) {
ans = m;
r = m -1;
} elseif (arr[m] < m) {
l = m +1;
} else {
r = m -1;
}
}
return ans;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
funcfixedPoint(arr []int) int {
l, r, ans:=0, len(arr)-1, -1forl<=r {
m:= (l+r) /2ifarr[m] ==m {
ans = mr = m-1 } elseifarr[m] < m {
l = m+1 } else {
r = m-1 }
}
returnans}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
classSolution {
publicintfixedPoint(int[] arr) {
int l = 0, r = arr.length- 1, ans =-1;
while (l <= r) {
int m = l + (r - l) / 2;
if (arr[m]== m) {
ans = m;
r = m - 1;
} elseif (arr[m]< m) {
l = m + 1;
} else {
r = m - 1;
}
}
return ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
classSolution {
funfixedPoint(arr: IntArray): Int {
var l = 0var r = arr.size - 1var ans = -1while (l <= r) {
val m = (l + r) / 2if (arr[m] == m) {
ans = m
r = m - 1 } elseif (arr[m] < m) {
l = m + 1 } else {
r = m - 1 }
}
return ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
classSolution:
deffixedPoint(self, arr: list[int]) -> int:
l, r, ans =0, len(arr) -1, -1while l <= r:
m = (l + r) //2if arr[m] == m:
ans = m
r = m -1elif arr[m] < m:
l = m +1else:
r = m -1return ans
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
impl Solution {
pubfnfixed_point(arr: Vec<i32>) -> i32 {
let (mut l, mut r, mut ans) = (0, arr.len() asi32-1, -1);
while l <= r {
let m = (l + r) /2;
let m_usize = m asusize;
if arr[m_usize] == m {
ans = m;
r = m -1;
} elseif arr[m_usize] < m {
l = m +1;
} else {
r = m -1;
}
}
ans
}
}