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做对比得到两种特殊情况:

  1. 落在右端时,如果target大于右端最大值,那么要查找的一定在左端;
  2. 落在左端时,如果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的更多相关文章

  1. [array] leetcode - 33. Search in Rotated Sorted Array - Medium

    leetcode - 33. Search in Rotated Sorted Array - Medium descrition Suppose an array sorted in ascendi ...

  2. [Leetcode][Python]33: Search in Rotated Sorted Array

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 33: Search in Rotated Sorted Arrayhttps ...

  3. LeetCode 33 Search in Rotated Sorted Array [binary search] <c++>

    LeetCode 33 Search in Rotated Sorted Array [binary search] <c++> 给出排序好的一维无重复元素的数组,随机取一个位置断开,把前 ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. 刷题33. Search in Rotated Sorted Array

    一.题目说明 这个题目是33. Search in Rotated Sorted Array,说的是在一个"扭转"的有序列表中,查找一个元素,时间复杂度O(logn). 二.我的解 ...

  8. [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. ...

  9. 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. ...

  10. 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 ...

随机推荐

  1. [基础]RHEL6下iSCSI客户端挂载配置

    本文根据鸟哥私房菜进行操作:http://linux.vbird.org/linux_enterprise/xen.php?thisscreen=800x600 一.侦测 [root@vhost3 ~ ...

  2. mysql关联更新

    update tb_sdd_info a,tb_bnm_evian_info b set a.username=b.username where a.username=b.memberno and  ...

  3. 初探swift语言的学习笔记(闭包 - 匿名函数或block块代码)

    很多高级语言都支持匿名函数操作,在OC中的block也为大家所熟悉,然面在swift里好像是被重新作了一个定义,不叫匿名函数,或 block了,而叫闭包(closure).下面配合代码来理解一下swi ...

  4. Linux用户及用户组管理

    Linux是个优秀的多用户多任务操作系统. 掌握Linux的用户/用户组管理是基本及必备技能之一. 简单做下总结. 无论采用图形界面的用户管理设置,还是终端的管理方式,最终目的都是对系统的用户/用户组 ...

  5. 腾讯TGideas语义化标签(转)

    --------引子--------------- 家里有个熊孩子,经常会有一些意想不到的事情发生:回家的时候,他会笑呵呵冲过来,大声喊着“臭爸爸”:你让他把鞋穿上,他会提起鞋子往楼下扔...在小孩的 ...

  6. oracle数据库获取指定表的列的相关信息

    1.很多时候我们需要从数据库中获取指定表的所有列的相关属性,如 name,commens,datatype,datalength,pk等.下面就是制定的语句. select c.TABLE_NAME ...

  7. USACO Section 5.1 Musical Themes(枚举)

    直接枚举O(n^3)会TLE,只要稍微加点优化,在不可能得到更优解时及时退出.其实就是道水题,虽说我提交了6次才过= =..我还太弱了 -------------------------------- ...

  8. C++中的unordered_map

    1.简介 随着C++0x标准的确立,C++的标准库中也终于有了hash table这个东西.很久以来,STL中都只提供<map>作为存放对应关系的容器,内部通常用红黑树实现,据说原因是二叉 ...

  9. Analysis about different methods for reading and writing file in Java language

    referee:Java Programming Tutorial Advanced Input & Output (I/O) JDK 1.4+ introduced the so-calle ...

  10. BOM 浏览器对象模型学习

    window对象属性 innerWidth/innerHeight 浏览器窗口的内部宽度与高度 outerWidth/outerHeight 浏览器的外部宽度与高度 length window.fra ...