与之前的题目代码一样。。
是上一题的followup http://blog.csdn.net/fightforyourdream/article/details/16854537
package Level5;
/**
* Search in Rotated Sorted Array II
*
* 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.
*
*/
public class S81 {
public static void main(String[] args) {
}
public static boolean search(int[] A, int target) {
return rec(A, target, 0, A.length-1) != -1;
}
// 递归查找
public static int rec(int[] A, int target, int low, int high) {
if (low > high) { // 没找到的情况
return -1;
}
int mid = low + (high - low) / 2;
if (A[mid] == target) { // 找到了
return mid;
}
int res = rec(A, target, low, mid - 1); // 在左侧查找
if (res == -1) { // 如果左侧没找到,继续在右侧查找
res = rec(A, target, mid + 1, high);
}
return res;
}
}
public class Solution {
public boolean search(int[] A, int target) {
return rec(A, target, 0, A.length-1) != -1;
}
public int rec(int[] A, int target, int low, int high){
if(low > high){
return -1;
}
int mid = low + (high-low)/2;
if(A[mid] == target){
return mid;
}
int pos = rec(A, target, mid+1, high);
if(pos != -1){
return pos;
}else{
return rec(A, target, low, mid-1);
}
}
}
// it ends up the same as sequential search
// We used linear search for this question just to indicate that the
// time complexity of this question is O(n) regardless of binary search is applied or not.
public class Solution {
public boolean search(int[] A, int target) {
for (int i = 0; i < A.length; i ++) {
if (A[i] == target) {
return true;
}
}
return false;
}
}