您的位置:首页 > 其它

【leetcode】Array——Search in Rotated Sorted Array II(81)

2016-02-26 11:54 507 查看
题目:

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.
思路:

借鉴前一题的思路,同样,先通过比较nums[mid]和nums[left],确定转折点是在左半侧还是右半侧。由于允许重复,所以会出现nums[mid]==nums[left],

这时候不能确定转折点的位置,比如[1,2,1,1,1]和[1,1,1,2,1]

所以这种情况仅作“简单处理”——left++,再重新循环判断。

代码:

public boolean search(int[] nums, int target) {
int left =0,right=nums.length-1;
while(left<=right){
int mid = (left+right)/2;
if(nums[mid]==target)
return true;
if(nums[mid]>nums[left]){//转折点在右侧
if(target<nums[mid]&&target>=nums[left])
right = mid -1;
else
left = mid +1;
}else if(nums[mid]<nums[left]){//转折点在左侧
if(target>nums[mid]&&target<=nums[right])
left = mid +1;
else
right = mid -1;
}else{//nums[mid]==nums[left],此时无法判断转折点的位置,所以仅把left+1
left++;
}
}
return false;

}
leetcode上的解法和上述思路一样,有更详细的注释:https://leetcode.com/discuss/60618/neat-java-solution-using-binary-search
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: