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.
思路:先找出最小值的位置,然后在最小值的两侧进行二分查找,如果最小值在数组的开头/结尾,先判断最小值是不是和target相等,若不等,则对余下的元素进行二分查找
public class Solution {
public boolean search(int[] nums, int target) {
if (nums.length == 1) {
if (nums[0] == target) return true;
else return false;
}
else {
boolean flag = false;
int minIndex = 0;
for (int i = 0; i < nums.length-1;i++){
if(nums[i] > nums[i+1])
minIndex = i+1;
}
int low = 0;
int high = minIndex-1;
int mid = 0;
if (minIndex == 0) {
high = nums.length-1;
while(low <= high){
mid = (low + high)/2;
if(target == nums[mid]) {
flag = true;
break;
}
else if(target < nums[mid]) high = mid-1;
else low = mid+1;
}
return flag;
}
else if (target >= nums[0] && target <= nums[minIndex-1]) {
high = minIndex-1;
while(low <= high){
mid = (low + high)/2;
if(target == nums[mid]) {
flag = true;
break;
}
else if(target < nums[mid]) high = mid-1;
else low = mid+1;
}
return flag;
}
else {
low = minIndex;
high = nums.length-1;
while(low <= high){
mid = (low + high)/2;
if(target == nums[mid]) {
flag = true;
break;
}
else if(target < nums[mid]) high = mid-1;
else low = mid+1;
}
return flag;
}
}
}
}