1. 程式人生 > >Search in Rotated Sorted Array II LeetCode Java

Search in Rotated Sorted Array II LeetCode Java

ret RM In arr duplicate true rst array AS

描述
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.
分析
允許重復元素,則上一題中如果 A[m]>=A[l], 那麽 [l,m] 為遞增序列的假設就不能成立了,比
如 [1,3,1,1,1]。
如果 A[m]>=A[l] 不能確定遞增,那就把它拆分成兩個條件:
? 若 A[m]>A[l],則區間 [l,m] 一定遞增
? 若 A[m]==A[l] 確定不了,那就 l++,往下看一步即可。

二分查找

代碼

 1 // LeetCode, Search in Rotated Sorted Array II
 2 // 時間復雜度 O(log n),空間復雜度 O(1)
 3 class Solution {
 4              public static boolean search(int A[], int n, int target) {
 5                      int first = 0, last = n;
 6                      while (first != last) {
 7                              int
mid = (first + last) / 2; 8 if (A[mid] == target) 9 return true; 10 if (A[first] < A[mid]) { 11 if (A[first] <= target && target < A[mid]) 12 last = mid;
13 else 14 first = mid + 1; 15 } else if (A[first] > A[mid]) { 16 if (A[mid] <= target && target <= A[last-1]) 17 first = mid + 1; 18 else 19 last = mid; 20 } else 21 //skip duplicate one, A[start] == A[mid] 22 first++; 23 } 24 return false; 25 } 26 }

Search in Rotated Sorted Array II LeetCode Java