LeetCode 81. Search in Rotated Sorted Array II

来源:互联网 发布:卖家被淘宝封号前预兆 编辑:程序博客网 时间:2024/06/18 17:10

和LeetCode 32. Search in Rotated Sorted Array类似,分治。

数组任意的一次向右滚动(一个单位),考虑最后两个元素A[n-1], A[n-2]. 

若A[n-1]事实上为最初的A[0], 那么这次滚动后,数组将回到最初的状态,A[0'] < a[(n-1)'], 成为升序数组,二分搜索即可;

若A[n-1]并非最初的A[0], 那么必有A[n-2] <= A[n-1], 滚动后,A[n-1]变成A[0], A[0'] >= A[(n-1)'], 此时应当将数组分成两半,二分递归。


1) 若num[0] < num[n-1], 那么整个数组为升序,二分搜索;

2) 反之,必有一点k, 使得num[0, 1, ..., k]为升序,num[k+1, k+2, ..., n-1]为升序。此时以(left+right)/2为中点,把数组分成两部分,继续递归求解。


class Solution {public:    bool search(int A[], int n, int target)     {    return find(A, 0, n-1, target);    }private:bool find(int a[], int l, int r, int target){if (l > r){return false;} else if (l == r){return a[l] == target;}if (a[l] < a[r]){while (l < r){int mid = (l+r) >> 1;if (a[mid] < target){l = mid + 1;} else if (a[mid] > target){r = mid - 1;} else {return true;}}}return find(a, l, (l+r)>>1, target) || find(a, ((l+r)>>1)+1, r, target);}};


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 cad转pdf颜色浅怎么办 松下多功能传真一体机卡纸怎么办 无刷电机坏了怎么办 6kv高压电机绝缘不合格怎么办? 400t油压机下降太慢怎么办 无法连线到服务器1~1怎么办? 数控车床车角度不亮怎么办 超市存包柜的票不见了怎么办 交货期来不及导致船期延误怎么办 跑1000米中途累怎么办 手指被机器压烂怎么办 机械手不能回归原点该怎么办 前缘送纸纸板翘怎么办 三菱AL 1R.2报警怎么办 工作好但领导不好伺候怎么办 孕妇憋尿憋的小腹疼怎么办 怀孕憋尿憋的小腹疼怎么办 半夜憋尿憋的小腹疼怎么办 新生儿大便次数较多怎么办 母猎生下三天没有奶怎么办 孩孑大便干不爱喝水怎么办 发那科1050报警怎么办 plc模块bf亮了怎么办 plc模块df亮了怎么办 西门子触摸屏进不了主画面怎么办 pos机显示白屏怎么办 洗衣机的门坏了怎么办 西门子洗衣机门坏了怎么办 拆线线断在肉里怎么办 总线绝对值编码器方向反了怎么办 台达伺服报警009怎么办 台达plc禁止上传怎么办? 潜水泵电机启动绕组断线了怎么办? 永磁电机磁没了怎么办 热水器热水管坏了怎么办 松下伺服驱动器坏了怎么办 步进电机功率小了怎么办 电三轮电机坏了怎么办 电动车钢圈撞变形了怎么办 电动车后轮钢圈变形了怎么办 软油管接头渗油怎么办