一、问题描述
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.
二、问题分析
与"Search in Rotated Sorted Array"相比,需要额外判断相等的情况。 这一改变增加了时间复杂度,试想一个数组有同一数字组成{1,1,1,1,1},target=2, 那么这个算法就会将整个数组遍历,时间复杂度由O(logn)升到O(n)
三、Java AC代码
public boolean search(int[] nums, int target) {
int low = 0, high = nums.length - 1;
int mid = 0;
while(low<=high){
mid = (low+high) / 2;
if (nums[mid]==target) {
return true;
}
if (nums[mid]<nums[high]) {//the right side is sorted
if (nums[mid]<target && target<=nums[high]) {
low = mid + 1;
}else {
high = mid - 1;
}
}else if (nums[mid]>nums[high]) {//the lefe side is sorted
if (nums[low]<=target && target<nums[mid]) {
high = mid - 1;
}else {
low = mid + 1;
}
}else {
if(nums[mid]==nums[low]){
low++;
}
high--;
}
}
return false;
}