【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 ...
随机推荐
- sql获取表字段名、描述和类型
SELECT TableName = OBJECT_NAME(c.object_id), ColumnsName = c.name, Description = ex.value, ColumnTyp ...
- 关于使用由CA机构(EJBCA)颁发的证书实现SLLSocket双向认证服务端报null cert chain的解决方案
在 SSLSocket实现服务端和客户端双向认证的例子 文章中最后提到使用keytool.exe的自签证书实现双向认证可以,但是使用ejbca生成证书实现SLL Socket的双向认证是服务端老是报错 ...
- ORA-03113: 通信通道的文件结尾 进程 ID: 764 会话 ID: 125 序列号: 5
昨天因为导入很久数据,最后一看是因为数据文件不够,后来就关机了.现在,开启数据库,总是报“ORA-03113: 通信通道的文件结尾” SQL> conn /as sysdba; 已连接到空闲例程 ...
- mvn command is not recognized as an internal or external command
even though I have configured %m2_home% and %path% correctly, the command "mvn" is still n ...
- smarty函数-转载
Smarty常用函数 2009-08-13 14:05:55| 分类: Php |举报 |字号 订阅 1 .include_once语句: 引用文件路径,路径必需正确. eg:include ...
- clip原理
1.clip的概述: clip是修剪之意 clip有4个属性值:inherit auto rect(20px,40px,60px,0px) !important 其中有作用的仅rect这个属性值,着重 ...
- which 查看可执行文件的位置
我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which 查看可执行文件的位置. whereis 查看文件的位置. ...
- PDO简介
php链接数据库 半年后需要更换mysql为集群模式或者有钱了升级oracl数据库,这时的改动相当大,成本高.如果再之前使用PDO,之后再遇见这样的问题就很轻松. 开启PDO: 打开php.ini文件 ...
- js静态属性和静态方法
啥也不说了,直接上代码...(就是这么任性) var Animal = function(){}; Animal.name = "dog"; var a = ...
- C语言迭代求解
date : 2013/8/12 desinger :pengxiaoen 今天看 国外电子信息科学经典教材系列 <电子电路分析与设计> 电子工业出版社的 的19 ...