这道题与LEETCODE33类似,不同的是它的数组中可以出现重复数字。
题目是在搜索旋转排序数组2;
假设一个升序的数组,在某一节点进行旋转,求判断给定值是否在这组数组中,若存在则返回true,否则返回false。
注意点:数组中可能存在重复数据

示例1:

输入: nums = [2,5,6,0,0,1,2], target = 0
输出: true

示例2:

输入: nums = [2,5,6,0,0,1,2], target = 3
输出: false

题解:

被之前那题影响思路,也用了二分来写,代码如下所示,多了个值相等的判断来更新边界值

现在想想直接读入判断不就完事儿了嘛~

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

lass Solution {
public boolean search(int[] nums, int target) {
int r = nums.length - 1;
int l = 0;
while (l <= r) {
while (l < r && nums[l] == nums[l + 1])
++l;
while (l < r && nums[r] == nums[r - 1])
--r;
int mid = (r - l) / 2 + l;
System.out.print(mid);
if (nums[mid] == target)
return true;
else if (nums[mid] < nums[r]) {
if (nums[mid] < target && target <= nums[r])
l = mid + 1;
else
r = mid - 1;
} else {
if (target >= nums[l] && target < nums[mid])
r = mid - 1;
else
l = mid + 1;
}

}
return false;
}
}