leetcode-81. Search in Rotated Sorted Array II
题目:
Follow up for “Search in Rotated Sorted Array”:
What if duplicates are allowed?Would this affect the run-time complexity? How and why?
Write a function to determine if a given target is in the array.
类似33题的衍生题
但是这题有可重复问题的限制。那么会出现一个问题比如说13111这样的情况,左节点右节点和中间节点都是一样的。泛化的说就是无法判断到底是左半部分和右半部分到底哪个是规则的。之所以出现这样的情况。就是因为对于平台区同时存在于左半部分和右半部分,那如何解决这个问题呢我用的方法就是当左节点和右节点相等的时候移动左或右节点直到两个节点不相同,这样就可以判断到底左半部分还是右半部分是规则的了。剩下的如同33题
public class Solution {
public boolean search(int[] nums, int target) {
int i = 0 , j = nums.length-1;
while(i<j){
while(i<j && nums[i]==nums[j])j--;
if(i==j) break;
int m = (i+j)>>1;
if(nums[m]==target) return true;
if(nums[i]>nums[m]){
if(nums[m]<=target && target <= nums[j]){
i=m+1;
}else{
j=m;
}
}else{
if(nums[i]<=target && target<=nums[m]){
j=m;
}else{
i=m+1;
}
}
}
return nums[i]==target;
}
}