leetcode 【 Find Minimum in Rotated Sorted Array II 】python 实现

题目

Follow up for "Find Minimum in Rotated Sorted Array":
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

The array may contain duplicates.

 

代码:oj测试通过 Runtime: 82 ms

复制代码
 1 class Solution:
 2     # @param num, a list of integer
 3     # @return an integer
 4     def findMin(self, num):
 5         # none case
 6         if num is None :
 7             return None
 8         # only one element case
 9         if len(num)==1 :
10             return num[0]
11         # binary search case
12         start = 0
13         end = len(num)-1
14         while start<end and num[start]>=num[end]:
15             mid = (start+end)/2
16             if num[start]>num[end]:
17                 if num[mid]>num[end] :
18                     start = mid+1
19                 else:
20                     end = mid
21             else:
22                 if num[mid]>num[end] :
23                     start = mid+1
24                 else :
25                     start = start+1
26         return num[start]
复制代码

 

思路

对比之前一道题:http://www.cnblogs.com/xbf9xbf/p/4261334.html

这道题需要考虑duplicate的case。

简略地说,跟之前不带duplicate的case相比,核心的区别在:

不带duplicate的case : num[start]>num[end]是铁定成立的

带duplicate的case : num[start]>num[end]不一定是成立的,还可能是num[start]==num[end]

就是多了这么一个等号的可能,所以最直观的办法就是单独把这种等号的情况拿出来嘛。

因此需要讨论的情况一共有两种:

1. num[start]>num[end]

2. num[start]==num[end]

有人可能要问,为啥不能有num[start]<num[end]的情况?答:因为在while循环终止条件中已经限定了num[start]>=num[end];如果真有num[start]<num[end]的情况,那么当前start到end位置的数组已经是有序的了,直接return[start]就OK了。

 

Tips:

在AC之前还遇上几个问题:

1. 如果出现无法判断最小值是在左半边还是右半边的时候,不要同时start=start+1 end=end-1,start=start+1即可,否则会指针溢出

2. 之前在while循环条件的时候,一直写的是start<=end。就是多了这么一个等号,submit了几次一直不能AC。究其原因,如果start==end,就会导致执行start=start+1语句,不是溢出就是错。如果修改一下while循环的条件,start<end,那么当start==end的时候自动就退出循环了,并且返回num[start]了。

posted on   承续缘  阅读(195)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示