LeetCode 81. 搜索旋转排序数组 II
原题链接
中等
作者:
LangB
,
2020-11-03 12:19:10
,
所有人可见
,
阅读 353
class Solution {
public boolean search(int[] nums, int target) {
int l = 0, r = nums.length - 1;
while (l <= r) {
int mid = l + r >> 1;
// 如果恰好等于target,则说明找到目标值,返回true
if (nums[mid] == target) {
return true;
}
if (nums[mid] < nums[r]) {
// 如果中间的数小于最右边,则右半段有序
if (nums[mid] < target && target <= nums[r]) {
// 如果target在右半段,则更新l
l = mid + 1;
} else {
// 如果target不在右半段,则更新r
r = mid - 1;
}
} else if (nums[mid] > nums[r]) {
// 如果中间的数大于最右边,则左半段有序
if (nums[l] <= target && target < nums[mid]) {
// 如果target在左半段,则更新r
r = mid - 1;
} else {
// 如果target不在左半段,则更新l
l = mid + 1;
}
} else {
// 去重
r--;
}
}
return false;
}
}