Leetcode81. Search in Rotated Sorted Array II
这题和Leetcode33. Search in Rotated Sorted Array ,为同一系列,只是多了重复元素。所以思想一致,都是先判断那边是有序的,哪边会包含rotated。然后判断target是否在有序一遍,不在的话去另一边找找看。
多了重复元素,比如34333,无法判断应该往那边找,所以就只能直接暴力遍历。
class Solution {
public boolean search(int[] nums, int target) {
if(nums==null||nums.length<1) return false;
int left = 0,right = nums.length-1;
int mid = (left+right)/2;
while(left<=right){
mid = (left+right)/2;
if(nums[mid]==target) return true;
if(nums[mid]>nums[left]){//判断mid左边是否是有序的,是的话,右边会包含rotated元素
if(target>=nums[left]&&target<nums[mid]){//判断target是否在有序的一边
right = mid-1;
}else{
left = mid+1;
}
}else if(nums[mid]<nums[right]){//mid右边有序
if(target>nums[mid]&&target<=nums[right]){
left = mid +1;
}else{
right = mid -1;
}
}else{//mid和left或right元素相等,这种情况下无法判断哪边有序,就暴力搜索
return bruteSearch(nums,target,left,right);
}
}
return false;
}
private boolean bruteSearch(int[] nums,int target,int left,int right){
for(int i=left;i<=right;i++){
if(target==nums[i]) return true;
}
return false;
}
}
Runtime: 0 ms, faster than 100.00% of Java online submissions for Search in Rotated Sorted Array II.
Memory Usage: 39.4 MB, less than 14.73% of Java online submissions for Search in Rotated Sorted Array II.

浙公网安备 33010602011771号