这道题与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; } }
|