leetcode 【 Search in Rotated Sorted Array 】python 实现
题目:
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
).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array
代码:oj测试通过 Runtime: 53 ms
1 class Solution: 2 # @param A, a list of integers 3 # @param target, an integer to be searched 4 # @return an integer 5 def search(self, A, target): 6 # none case & zero case 7 if A is None or len(A)==0 : 8 return -1 9 # binary search 10 start = 0 11 end = len(A)-1 12 while start<=end : 13 # one element left case 14 if start == end : 15 if A[start]==target : 16 return start 17 else: 18 return -1 19 # two elements left case 20 if start+1 == end : 21 if A[start]==target : 22 return start 23 elif A[end]==target : 24 return end 25 else: 26 return -1 27 # equal or more than three elements case 28 mid = (start+end)/2 29 if A[mid]==target : 30 return mid 31 elif A[mid]>target: 32 if A[start]>A[mid] and A[end]<A[mid]: 33 start = mid+1 34 elif A[start]<A[mid] and A[end]<A[mid]: 35 if A[end]>=target: 36 start = mid+1 37 else: 38 end = mid-1 39 elif A[start]>A[mid] and A[end]>A[mid]: 40 end = mid-1 41 else: 42 end = mid-1 43 else: 44 if A[start]>A[mid] and A[end]<A[mid]: 45 end = mid-1 46 elif A[start]<A[mid] and A[end]<A[mid]: 47 start = mid+1 48 elif A[start]>A[mid] and A[end]>A[mid]: 49 if A[end]>=target : 50 start = mid+1 51 else: 52 end = mid-1 53 else: 54 start = mid+1 55 return -1
思路:
这个就是binary search的思路。
个人没想出来什么好的方法,硬着头皮硬写了一个暴力解决方法。
传统的binary search只需要判断A[mid]与target的大小就可以了;但这道题是rotated array,光判断A[mid]是不够的。
还需要判断A[start] A[end]与A[mid]的大小才能判断,target可能落在[start,mid]区间还是[mid,end]区间。
自己的代码实在有些繁琐丑陋,估计有些if else条件可以合并,后续会改进。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?