1. 题目分析
2. 题目解析
这道题虽然可以顺序查找,但是若我们用顺序查找的话,显然就失去了做这道题的意义,所以我们采用时间复杂度更优的二分查找。 我们以题中的案例来说 上面圈出这两个是有序的,所以我们在二分查找的基础上,再加上mid和right的对比就行了。
3. 代码实现
class Solution {
public boolean search(int[] nums, int target) {
int n = nums.length;
if (n == 0) {
return false;
}
if (n == 1) {
return nums[0] == target;
}
int l = 0, r = n - 1;
while (l <= r) {
int mid = (l + r) / 2;
if (nums[mid] == target) {
return true;
}
if (nums[l] == nums[mid] && nums[mid] == nums[r]) {
++l;
--r;
} else if (nums[l] <= nums[mid]) {
if (nums[l] <= target && target < nums[mid]) {
r = mid - 1;
} else {
l = mid + 1;
}
} else {
if (nums[mid] < target && target <= nums[n - 1]) {
l = mid + 1;
} else {
r = mid - 1;
}
}
}
return false;
}
}
|