LeetCode Search in Rotated Sorted Array
来源:互联网 发布:淘宝卖家好评回复模板 编辑:程序博客网 时间:2024/06/08 10:15
LeetCode解题之Search in Rotated Sorted Array
原题
把一个严格升序的数组进行旋转,如[0,1,2,3,4,5]旋转3位成为[3,4,5,0,1,2]。在这样的数组中找到目标数字。如果存在返回下标,不存在返回-1。
注意点:
- 数组中不存在重复的数字
- 不知道数组旋转了多少位
例子:
输入: nums = [4, 5, 6, 7, 0, 1, 2], target = 6
输出: 2
输入: nums = [4, 5, 6, 7, 0, 1, 2], target = 3
输出: -1
解题思路
采用了二分搜索,不过旋转后的数组要讨论的情况增多了。其实旋转后的数组的大小关系一般如下图:
/ / / / / / /
先通过中点与左顶点的关系来分类讨论中点落在了哪一部分,如果在左半边,则继续讨论目标数在中点的左边还是右边;如果在右半边,同样讨论目标数的位置。同时需要注意特殊情况只剩下两个数时,例如[3,1],这时求出的中点也是3,如果中点不匹配,应考虑1。这种情况不好与上面的情况合并,单独列出。
AC源码
class Solution(object): def search(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int """ left = 0 right = len(nums) - 1 while left <= right: mid = left + (right - left) // 2 if nums[mid] == target: return mid if nums[mid] > nums[left]: if nums[left] <= target <= nums[mid]: right = mid - 1 else: left = mid + 1 elif nums[mid] < nums[left]: if nums[mid] <= target <= nums[right]: left = mid + 1 else: right = mid - 1 else: left += 1 return -1if __name__ == "__main__": assert Solution().search([4, 5, 6, 7, 0, 1, 2], 4) == 0 assert Solution().search([4, 5, 6, 7, 0, 1, 2], 7) == 3 assert Solution().search([4, 5, 6, 7, 0, 1, 2], 0) == 4 assert Solution().search([4, 5, 6, 7, 0, 1, 2], 2) == 6 assert Solution().search([3, 1], 3) == 0 assert Solution().search([3, 1], 1) == 1
欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源码。
0 0
- [leetcode][search] Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array II
- LeetCode Search in Rotated Sorted Array
- LeetCode Search in Rotated Sorted Array II
- [Leetcode] Search in Rotated Sorted Array
- LeetCode : Search in Rotated Sorted Array
- LeetCode : Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array
- [Leetcode] Search in a Rotated Sorted Array
- [Leetcode] Search in Rotated Sorted Array II
- leetcode 97: Search in Rotated Sorted Array
- [LeetCode] Search in Rotated Sorted Array
- [leetcode] Search in Rotated Sorted Array
- [leetcode] Search in Rotated Sorted Array II
- Leetcode Search in Rotated Sorted Array
- [LeetCode]Search in Rotated Sorted Array
- cell自动计算高度(masonry与UITableView-FDTemplateLayoutCell)
- 获取发布时间距离当前时间的时间
- python学习笔记(一)---python简介
- qtp vb正则表达式RegExp、随机函数参数化RandomNumber实现
- 转的,备忘下,Arraylist排序
- LeetCode Search in Rotated Sorted Array
- log4j+flume+kafka+strom整合
- An error occured starting Mathtype's Commonds for word(office32+mathType6.8)
- JPush实现app推送功能
- 给控件添加阴影
- NAL技术
- <php+mysql>PHP脚本条件判断,foreach循环,以及粘性表单
- 学习Android从0开始之开发工具篇-Android studio详解
- 乘积配对,找出输入数据中所有两两相乘的积为 12的个数--C++