题目大意
还是跟上一题差不多,只是这一次数组里的元素可以重复。返回是否存在这个值。
思路
如果 nums[mid] >= nums[l], 那么 [l, mid] 为递增序列的假设就不能成立了。所以把这个条件拆成两个。
nums[l] < nums[mid]的话 [l, mid]是一定会递增的
nums[l] == nums[mid] 无法判断,令l++
其他条件同上一题
CODE
class Solution {
public:
bool search(vector<int>& nums, int target) {
int l = 0, r = nums.size();
while (l != r)
{
const int mid = (l + r) >> 1;
if (target == nums[mid])
return true;
if (nums[l] < nums[mid])
{
if (nums[l] <= target
&& target < nums[mid])
{
r = mid;
continue;
}
l = mid + 1;
continue;
}
if (nums[l] > nums[mid])
{
if (nums[mid] < target
&& target <= nums[r - 1])
{
l = mid + 1;
continue;
}
r = mid;
continue;
}
l++;
}
return false;
}
};
参考资料
LeetCode 题解
灵魂机器 (soulmachine@gmail.com) https://github.com/soulmachine/leetcode
1934

被折叠的 条评论
为什么被折叠?



