与之前的题目代码一样。。
是上一题的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; } }