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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值