题目链接:leetcode81
题面
题面大意
33 题的延伸,略
解题思路
二分
和 154 优化 153 的一样,当不能确定是左区间还是右区间时,把区间长度减一。
数组存在大量重复元素时,时间复杂度退化到 O ( n ) O(n) O(n)。
代码实现
class Solution {
public:
bool search(vector<int>& nums, int target) {
if (nums.size() == 0) return false;
int l = 0, r = nums.size()-1, mid;
while (l < r) {
mid = l + (r - l >> 1);
if (nums[r] > nums[mid]) {
if (target <= nums[mid] || target > nums[r]) r = mid;
else l = mid + 1;
} else if (nums[r] < nums[mid]) {
if (target > nums[mid] || target < nums[l]) l = mid + 1;
else r = mid;
} else {
r = r - 1;
}
}
return nums[l]==target?true:false;
}
};