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

来源:互联网 发布:mcu和单片机的区别 编辑:程序博客网 时间:2024/05/16 06:28

题目:

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;elseleft = mid +1;}else if(nums[mid]<nums[left]){//转折点在左侧if(target>nums[mid]&&target<=nums[right])left = mid +1;elseright = mid -1;}else{//nums[mid]==nums[left],此时无法判断转折点的位置,所以仅把left+1left++;}}return false;}
leetcode上的解法和上述思路一样,有更详细的注释:https://leetcode.com/discuss/60618/neat-java-solution-using-binary-search


0 0