Leetcode#81 Search in Rotated Sorted Array II

原题地址

如果不存在重复元素,仅通过判断数组的首尾元素即可判断数组是否连续,但是有重复元素的话就不行了,最坏情况下所有元素都一样,此时只能通过线性扫描确定是否连续。

设对于规模为n的问题的工作量为T(n),则有T(n) = T(n/2) + O(n),根据主定理,可以求得T(n) = O(n)。和之前的O(logn)相比还是退化了不少。

代码:

 1 bool monop(int A[], int l, int r) {
 2   while (l < r && A[l] <= A[r])
 3     l++;
 4   return A[l] <= A[r];
 5 }
 6 
 7 bool search(int A[], int n, int target) {
 8   int l = 0;
 9   int r = n - 1;
10 
11   while (l <= r) {
12     int m = (l + r) / 2;
13     if (A[m] == target)
14       return true;
15     if (monop(A, l, m)) {
16       if (A[l] <= target && target < A[m])
17         r = m - 1;
18       else
19         l = m + 1;
20     }
21     else {
22       if (target >= A[l] || target < A[m])
23         r = m - 1;
24       else
25         l = m + 1;
26     }
27   }
28 
29   return false;
30 }
原文地址:https://www.cnblogs.com/boring09/p/4256826.html