假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。
编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
和第33题类似
class Solution {
public boolean search(int[] nums, int target) {
if(nums.length == 0){
return false ;
}
if(nums.length == 1){
return nums[0]==target?true:false ;
}
int n = nums.length;
int start = 0 ;
int end = n - 1 ;
while(start <= end){
int mid = (start + end)/2 ;
if(nums[mid] == target) return true ;
if(nums[start] == nums[mid]){
start ++ ;
continue ;
}else if(nums[start] > nums[mid]){
if(nums[mid] > target || nums[end] < target){
end = mid - 1 ;
}else{
start = mid + 1 ;
}
}else {
if(target > nums[mid] || target < nums[start]){
start = mid + 1 ;
}else{
end = mid - 1 ;
}
}
}
return false ;
}
}
虽然是二分法,但是确实又start++这条语句,因此不能算是O(lgn)时间复杂度。