博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Search in Rotated Sorted Array II
阅读量:6435 次
发布时间:2019-06-23

本文共 1983 字,大约阅读时间需要 6 分钟。

在上题基础上,如果元素可以重复的话,那么就需要修改getPos,因为有可能直接得到的最小值不是正好在分界的地方。修改在第34行。

1 int findPos(int A[], int left, int right){ 2     if(left > right) 3         return -1; 4     int mid = (left+right)/2; 5     int result; 6     if(A[left] > A[mid]){ 7         result = findPos(A, left, mid-1); 8         if(result == -1) 9             return mid;10         else11             return A[result]
right)23 return -1;24 int mid = (left+right)/2;25 if(A[mid] == target)26 return mid;27 else if(A[mid] < target)28 return bsearch(A, mid+1, right, target);29 else30 return bsearch(A, left, mid-1, target);31 }32 bool search(int A[], int n, int target) {33 int pos = findPos(A, 0, n-1);34 while(pos > 0 && A[pos] == A[pos-1])35 pos--;36 int result = bsearch(A, 0, pos-1, target);37 if(result == -1)38 result = bsearch(A, pos, n-1, target);39 if(result == -1)40 return false;41 return true;42 }

 思路二的修改是如果A[m] == A[l]时,要两边都进行判断

1     bool search2(int A[], int n, int target, int l, int r){ 2         if(n == 0) 3             return false; 4         int m; 5         while(l <= r){ 6             m = (l+r)/2; 7             if(A[m] == target) 8                 return true; 9             else if(A[m] > A[l]){10                 if(target < A[m] && target >= A[l])11                     r = m-1;12                 else13                     l = m+1;14             }15             else if(A[m] < A[l]){16                 if(target > A[m] && target <= A[r])17                     l = m+1;18                 else19                     r = m-1;20             }21             else22                 return search2(A, n, target, l, m-1) || search2(A, n, target, m+1, r);23         }24         return false;25     }26     bool search(int A[], int n, int target) {27         return search2(A, n, target, 0, n-1);28     }

 

转载于:https://www.cnblogs.com/waruzhi/p/3348702.html

你可能感兴趣的文章
(轉貼) Jolt 2007得獎名單 (News) (.NET)
查看>>
(轉貼) ThinkPad鍵盤設計原理和哲學 (NB) (ThinkPad)
查看>>
Left 4 Dead升级补丁总汇(3663-3986)
查看>>
Delphi的System.Str - 将数字格式化为字符串
查看>>
Jlink无法识别CPU/lpc2103/lpc2131
查看>>
GridView里面嵌套RadioButton
查看>>
纯css制作带三角(兼容所有浏览器)
查看>>
『原创』+『参考』使用C#在PPC的Today界面上的任务栏加入应用程序图标
查看>>
Unity3D如何有效地组织代码?(转)
查看>>
短期目标[Till 2011-08-05]
查看>>
Linux内核配置(二) :CPU类型配置
查看>>
自动化测试工程师应聘要求
查看>>
记不住ASP.NET页面生命周期的苦恼
查看>>
[置顶] mkdir函数-linux
查看>>
android天气查询(一)websevice之ksoap2软件包的使用
查看>>
Python打印格式化与字符串
查看>>
431.chapter10. working with flat files
查看>>
【转】Info.plist中常用的key简介
查看>>
专门为ADO二层升三层的咏南中间件(特种用途)
查看>>
ArcGIS特殊标注效果的简单实现
查看>>