您的位置:首页 > 其它

Search in Rotated Sorted Array II

2013-11-13 06:20 176 查看
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.

Solution:

唯一需要判断的地方是如果刚好在duplicate的地方分开了怎么办,这样的时候 mid没有意义了。

public class Solution {
public boolean search(int[] A, int target) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
int end = A.length - 1;
int start = 0;
if (A[start] == A[end]){
if (A[start]==target) return true;
int i = A[start];
while (start <= end && A[start] == i) start ++;
while (start <= end && A[end] == i) end --;
}
while(start <= end){
int mid = (end + start) / 2;
if(target == A[mid]) return true;
if(A[start] <= A[mid]){//left half is sorted
if(A[start] <= target &&  target < A[mid]) end = mid - 1;
else start = mid + 1;
}
else{
if(A[mid] < target && target <= A[end]) start = mid + 1;
else end = mid - 1;
}
}
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: