(C++)剑指offer-拓展:数组中数值和下标相等的元素
数组为单调递增的数组,可以判断出nums[i] - i也为单调递增,因此便可以通过二分法进行处理,当nums[mid] - mid >= 0时,取左半部分,否则取右半部分,依次递归,整体时间复杂度为O(logn),具体代码如下:
class Solution {
public:
int getNumberSameAsIndex(vector<int>& nums) {
int l = 0, r = nums.size() - 1;
while(l < r){
int mid = l + r >> 1;
if(nums[mid] - mid >= 0) r = mid;
else l = mid + 1;
}
if(nums[r] == r) return r;
else return -1; //注意测试样例
}
};