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

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

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.

 

分析

如果允许重复元素,则Search in Rotated Sorted Array题中如果 A[m]>=A[l], 那么 [l,m] 为递增序列的假设就不能成立了,比
如 [1,2,3,1,1,1]。
如果 A[m]>=A[l] 不能确定递增,那就把它拆分成两个条件:
• 若 A[m]>A[l],则区间 [l,m] 一定递增
• 若 A[m]==A[l] 确定不了,那就 l++,往下看一步即可。

Search in Rotated Sorted Array 的code:

 

1 class Solution { 2 public: 3     bool search(int A[], int n, int target) { 4         int low = 0; 5         int high = n-1; 6         int mid ; 7  8          9         while(low<=high)10         {11             mid= (low + high)/2;12             13             if(A[mid]==target)14             {15                 return true;16             }17                     18             if(A[low]<=A[mid]) // the pivot is in the bottom half19             {20                 if(A[low]<=target && target < A[mid]) //target in the first half21                     high = mid-1;22                 else23                     low = mid+1;//target in the bottom half24             }25             else // the pivot is in the first half26             {27                 if(A[mid] < target && target <= A[high])// the pivot is in the first half28                     low = mid+1;29                 else //target in the first half30                     high = mid-1;31             }32             33         }34         return false;35         36     }37 };

 

 

将if (A[low] <= A[mid]) 拆成if (A[low] < A[mid]) 和 if (A[low] == A[mid]) 两个分支,code如下:

 
1 class Solution { 2 public: 3     bool search(int A[], int n, int target) { 4         int low = 0; 5         int high = n-1; 6         int mid ; 7  8          9         while(low<=high)10         {11             mid= (low + high)/2;12             13             if(A[mid]==target)14             {15                 return true;16             }17                     18             if(A[low]
A[mid])26 {27 if(A[mid] < target && target <= A[high])28 low = mid+1;29 else 30 high = mid-1;31 }32 else 33 low++;34 35 }36 return false;37 38 }39 };

 

 

转载于:https://www.cnblogs.com/diegodu/p/3790437.html

你可能感兴趣的文章
分页SQL
查看>>
linux系统使用sh文件传参数给matlab程序
查看>>
软工实践原型设计-黄紫仪
查看>>
食用指南
查看>>
CSS3圆角详解(border-radius)
查看>>
Python正则表达式指南
查看>>
前端学习之JavaScript中的 NaN 与 isNaN
查看>>
chrome安装json view插件
查看>>
CSS div 高度满屏
查看>>
页面回发速度由 6 秒减少为 0.6 秒的真实案例!
查看>>
一种实现C++反射功能的想法(一)
查看>>
lvs+keepalived+nginx高性能负载均衡集群
查看>>
XXL-Job高可用集群搭建
查看>>
JDBC
查看>>
Python replace()方法
查看>>
Kestrel: System.Exception: Error -4092 EACCES permission denied
查看>>
mysql select
查看>>
Nginx学习——Nginx进程间的通信
查看>>
5.2 上午
查看>>
[LintCode] Sort Integers 整数排序
查看>>