Suppose an array sorted in ascending order 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.Your algorithm's runtime complexity must be in the order of O(log n).

Example 1: Input: nums = [4,5,6,7,0,1,2] ,         target = 0                         Output: 4

Example 2: Input: nums =[4,5,6,7,0,1,2]           , target = 3                          Output: -1


思路

  这道题的主要思路我们可以利用二分查找的办法来解决问题,只不过相对于普遍性二分查找,旋转数组的情况会稍微复杂一些,主要是在缩小边界的判断上。如果nums[middle] 大于nums[start]时,我们还需要更具target和nums[start]、nums[middle]的大小关系来决定移动左边的指针还是移动右边的指针。
  时间夫复杂度为O(nlog n),空间复杂度为O(1)。
图示


解决代码

 class Solution:
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if not nums:
return -1
start, end = 0, len(nums)-1
while start <= end: # 循环条件
middle = start+((end-start)>>1) # 求中间值
if nums[middle] == target: # 找到直接返回下标
return middle
elif nums[start] <= nums[middle]: # 先判断nums[start] 和nums[middle]的关系
if nums[start] <= target and target < nums[middle]: # 在判断start和middle对应元素与target的关系,决定相应指针移动方向
end = middle -1
else:
start = middle + 1
else:
if nums[middle] < target and target <= nums[end]: # 判断之间的关系middle和end对应元素yutarget之间的关系。
start = middle + 1
else:
end = middle -1
return -1 # 没有找到,返回-1

【LeetCode每天一题】Search in Rotated Sorted Array(在旋转数组中搜索)的更多相关文章

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

  2. 【LeetCode】Find Minimum in Rotated Sorted Array 在旋转数组中找最小数

    Add Date 2014-10-15 Find Minimum in Rotated Sorted Array Suppose a sorted array is rotated at some p ...

  3. Leetcode33--->Search in Rotated Sorted Array(在旋转数组中找出给定的target值的位置)

    题目: 给定一个旋转数组,但是你不知道旋转位置,在旋转数组中找出给定target值出现的位置:你可以假设在数组中没有重复值出现 举例: (i.e., 0 1 2 4 5 6 7 might becom ...

  4. leetcode第32题--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 migh ...

  5. [CareerCup] 11.3 Search in Rotated Sorted Array 在旋转有序矩阵中搜索

    11.3 Given a sorted array of n integers that has been rotated an unknown number of times, write code ...

  6. [leetcode]81. Search in Rotated Sorted Array II旋转过有序数组里找目标值II(有重)

    This is a follow up problem to Search in Rotated Sorted Array, where nums may contain duplicates. 思路 ...

  7. [LeetCode] 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 migh ...

  8. [算法题] Search in Rotated Sorted Array ii

    题目内容 题目来源:LeetCode Suppose an array sorted in ascending order is rotated at some pivot unknown to yo ...

  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 Search in Rotated Sorted Array 在旋转了的数组中查找

    Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...

随机推荐

  1. day_5.07py

    正则:

  2. Java基础语法<七> 对象与类 封装

    笔记整理 来源于<Java核心技术卷 I > <Java编程思想> 1. 类之间的关系 1.1 依赖 users– a 是一种最明显的.最常见的关系.如果一个类的方法操作另一个 ...

  3. Unix api

    ● 线程 进程的所有信息都被自己的线程共享,包括代码.全局内存.堆.栈.文件描述符. 线程拥有自己的信息,包括线程ID.一组寄存器值.栈.调度优先级和策略.信号屏蔽字.errno变量以及线程的私有数据 ...

  4. POJ 3974 - Palindrome - [字符串hash+二分]

    题目链接:http://poj.org/problem?id=3974 Time Limit: 15000MS Memory Limit: 65536K Description Andy the sm ...

  5. [No000018B]写代码要用 Vim,因为越难入门的工具回报越大

    编者按:现在的技术界有一种倾向,将软件/应用操作简单化,用户能轻松上手.但是工具是否强大,取决于它能否灵活地满足使用者的各种需要.有些工具虽然很难入门,学会了便能对自己的操作有更深的层次的了解,能赋予 ...

  6. zookerper安装部署

    ********************单节点安装zk*************************上传zk安装包到服务器/mnt目录下: [root@chavin ~]$ ll /mnt/zoo ...

  7. HTML5:表单提交

    不加CSS.JavaScrips的HTML表单提交简单代码 <!DOCTYPE html> <html lang="en"> <head> &l ...

  8. 一次Flannel和Docker网络不通定位问题

    一次Flannel和Docker网络不通定位问题    查看路由表的配置 路由表情况 [root@k8s-master ~]# route -n Kernel IP routing table Des ...

  9. CSP 通信顺序进程

    communicating sequential processes CSP 通信顺序进程 C.A.R.Hoare 1979 CSP是一种用来描述并行系统交互模式的形式语言,最早由C.A.R.Hoar ...

  10. ms sql server读取xml文件存储过程-sp_xml_preparedocument

    最近要在存储过程中读取xml中节点的值,然后进行sql操作: 要使用到的系统存储过程如下:sp_xml_preparedocument create procedure [dbo].[pro_Test ...