因为数组单调递增,进而想到用二分解题。
class Solution {
public:
int getNumberSameAsIndex(vector<int>& nums) {
int len = nums.size();
int l = 0,r = len-1;
while(l<r){
int mid = (l+r+1) >> 1; //l+r后再加上l避免了整数溢出
if(nums[mid] > mid) r = mid - 1; //下标为mid的元素大于mid,说明所查找的元素位于mid的左侧
else l = mid;
}
if(nums[l] == l) return l;//循环终止时l=r,此处也可以写成“if(nums[r] == r) return r”
else return -1;
}
};