题目:
Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?Would this affect the run-time complexity? How and why?
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
Write a function to determine if a given target is in the array.
The array may contain duplicates.
解决方法一:主要是考虑到重复数情况 如[1,1,1,1,2,1]public class Solution {
public boolean search(int[] nums, int target) {
int mid =0;
int start =0;
int end = nums.length-1;
boolean ret = false;
while(start<=end){
mid =(start+end)/2;
if(target==nums[mid]){
ret = true;
break;
}
if(start==end) break;
if(nums[mid]>nums[end]){
end = target>=nums[start]&&target<nums[mid]? mid-1:end;
start = target>=nums[start]&&target<nums[mid]?start:mid+1;
}
else if(nums[mid]<nums[start]){
start = target<=nums[end]&&target>nums[mid]? mid+1:start;
end = target<=nums[end]&&target>nums[mid]?end:mid-1;
}else if(nums[mid]==nums[end]&&nums[mid]==nums[start]){
start++;
end--;
} else{
start = target<=nums[mid]? start:mid+1;
end = target<=nums[mid]? mid-1:end;
}
}
return ret;
}
}
参考:
针对含有重复元素的旋转排序数组,本文介绍了一种查找特定目标值的有效算法。该方法通过调整二分查找策略来处理重复元素带来的挑战,确保了算法在复杂情况下的正确性和效率。
818

被折叠的 条评论
为什么被折叠?



