【LeetCode题意分析&解答】33. Search in Rotated Sorted Array
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.
题意分析:
本题是将一个排好序的数组从某一个(不清楚为什么原题中是some pivot,但是肯定是一个,因为如果是多个,考虑极端情况数组将会变成完全是无序的)位置进行旋转,也就是说将一个本来严格递增的数组变成了前后两部分递增的序列,所以会有一个分界。在这样一个旋转后的数组里面查找数字,并返回它的下标,如果找不到的话返回-1。
解答:
如果是个普通的递增数组,那么直接用二分查找就ok了。本题并不是一个严格递增的序列,但是仍然可以用二分查找去做。
二分查找的核心是取两端元素的中间节点mid,本题可以在获取了mid之后和两端元素对比。如果左边元素小于mid,那么mid一定是落在了右面的递增序列中;反之一定是落在了左边。target是要查找的值,知道了mid在哪边之后,就可以拿边界值和target做对比得到两种特殊情况:
- 落在右端时,如果target大于右端最大值,那么要查找的一定在左端;
- 落在左端时,如果target小于左端最小值,那么要查找的一定在右端。
除去这两种特殊情况之后,直接简单的用二分查找进行处理就可以了。
AC代码:
class Solution(object):
def search(self, nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) / 2
if nums[mid] == target:
return mid
# mid in the right side of rotated sorted array
if nums[left] > nums[mid]:
# target can't be in the right side
if target > nums[right]:
right = mid - 1
else:
# simple binary search
if nums[mid] > target:
right = mid - 1
else:
left = mid + 1
# mid in the left side of rotated sorted array
else:
# target can't be in the left side
if target < nums[left]:
left = mid + 1
else:
if nums[mid] > target:
right = mid - 1
else:
left = mid + 1
return -1
【LeetCode题意分析&解答】33. Search in Rotated Sorted Array的更多相关文章
- [array]  leetcode - 33. Search in Rotated Sorted Array - Medium
		leetcode - 33. Search in Rotated Sorted Array - Medium descrition Suppose an array sorted in ascendi ... 
- [Leetcode][Python]33: Search in Rotated Sorted Array
		# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 33: Search in Rotated Sorted Arrayhttps ... 
- LeetCode 33 Search in Rotated Sorted Array [binary search] <c++>
		LeetCode 33 Search in Rotated Sorted Array [binary search] <c++> 给出排序好的一维无重复元素的数组,随机取一个位置断开,把前 ... 
- LeetCode题解33.Search in Rotated Sorted Array
		33. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated at some piv ... 
- leetcode 153. Find Minimum in Rotated Sorted Array 、154. Find Minimum in Rotated Sorted Array II 、33. Search in Rotated Sorted Array 、81. Search in Rotated Sorted Array II 、704. Binary Search
		这4个题都是针对旋转的排序数组.其中153.154是在旋转的排序数组中找最小值,33.81是在旋转的排序数组中找一个固定的值.且153和33都是没有重复数值的数组,154.81都是针对各自问题的版本1 ... 
- 33. Search in Rotated Sorted Array & 81. Search in Rotated Sorted Array II
		33. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated at some piv ... 
- 刷题33. Search in Rotated Sorted Array
		一.题目说明 这个题目是33. Search in Rotated Sorted Array,说的是在一个"扭转"的有序列表中,查找一个元素,时间复杂度O(logn). 二.我的解 ... 
- [LeetCode] 33. Search in Rotated Sorted Array 在旋转有序数组中搜索
		Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ... 
- LeetCode 33. Search in Rotated Sorted Array(在旋转有序序列中搜索)
		Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ... 
- leetCode 33.Search in Rotated Sorted Array(排序旋转数组的查找) 解题思路和方法
		Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ... 
随机推荐
- Ubuntu14.04 Server Apache2+subversion环境搭建
			自从工作后,发现之前的代码开发太随便啦,于是经过不到两年的工作积累,打算在自己开发软件的过程中好好管理自己的项目.于是打算搭建自己的项目服务器,去年搭建过一次,但是由于没有记录,现在需要再来一遍,好多 ... 
- Android  常用开发类库
			android.app :提供高层的程序模型.提供基本的运行环境 android.content :包含各种的对设备上的数据进行访问和发布的类 android.database :通过内容 ... 
- Swift与Objective-C交互
			在同一个工程中是可以同时使用Swift和OC的,但不可以同时出现在同一个文件中. OC调用Swift相关信息的方法 在***.m文件中导入工程名-Swift.h即可. 如工程名为ABC,则在需要使用S ... 
- Android tp的虚拟按键(virtual key)处理
			Android tp的虚拟按键处理 现在在越来越多的Android的手机都是虚拟按键来操作,但是对于开发者来说可能会关心Android对虚拟按键如何处理的.对Linux熟悉的人可能会说,it's ea ... 
- SQL Server中 sysobjects、syscolumns、systypes
			1.sysobjects 系统对象表. 保存当前数据库的对象,如约束.默认值.日志.规则.存储过程等 在大多数情况下,对你最有用的两个列是Sysobjects.name和Sysobjects.x ... 
- EAX、ECX、EDX、EBX寄存器的作用(转)
			一般寄存器:AX.BX.CX.DXAX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器 索引暂存器:SI.DISI:来源索引暂存器,DI:目的索引暂存器 堆叠.基底暂存器:SP.BP ... 
- IO库 8.3
			题目:什么情况下,下面的while循环会终止? while(cin >> i) /* ... */ 解答:当读取发生错误时上述while循环会终止.比如i是整形,却输入非整形的数:输入文件 ... 
- 关于scala和java 在maven项目中混编的问题
			1.需要添加scala 相关maven配置: <properties> <scala.version>2.10.1</scala.version> <slf4 ... 
- 一个简单的web框架实现
			一个简单的web框架实现 #!/usr/bin/env python # -- coding: utf-8 -- __author__ = 'EchoRep' from wsgiref.simple_ ... 
- fiddler--firefiox代理
			修改端口:修改后重启才能生效 
