二分查找算法以及旋转之后的数组二分查找算法:

#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
__author__ = 'author' class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
return self.sorted_binary_search(nums, 0, len(nums) - 1, target) #二分查找算法
def binary_search(self, nums, start, end, targrt):
if start > end:
return -1
mid = start + (end - start)//2
if nums[mid] > targrt:
return self.binary_search(nums, start, mid - 1, targrt)
elif nums[mid] < targrt:
return self.binary_search(nums, mid + 1, end, targrt)
else:
return mid #旋转数组的折半查找算法
'''
要解决这道题,需要明确rotated sorted array的特性,
那么就是至少有一侧是排好序的(无论pivot在哪,自己画看看)。
接下来就只需要按照这个特性继续写下去就好。 如果target比A[mid]值要小
如果A[mid]右边有序(A[mid]<A[high])
那么target肯定不在右边(target比右边的都得小),在左边找
如果A[mid]左边有序
那么比较target和A[low],如果target比A[low]还要小,
证明target不在这一区,去右边找;反之,左边找。 如果target比A[mid]值要大
如果A[mid]左边有序(A[mid]>A[low])
那么target肯定不在左边(target比左边的都得大),在右边找
如果A[mid]右边有序
那么比较target和A[high],如果target比A[high]还要大,
证明target不在这一区,去左边找;反之,右边找。
'''
def sorted_binary_search(self, nums, start, end, targrt):
if start > end:
return -1
mid = start + (end - start)//2
if targrt == nums[mid]:
return mid
if nums[start] <= nums[mid]:
#如果左侧有序
if nums[start] <= targrt and targrt <= nums[mid]:
#如果target在左侧中
return self.sorted_binary_search(nums, start, mid - 1, targrt)
else:
return self.sorted_binary_search(nums, mid + 1, end, targrt)
else:
#如果右侧有序
if nums[mid] <= targrt and targrt <= nums[end]:
#如果target在右侧中
return self.sorted_binary_search(nums, mid + 1, end, targrt)
else:
return self.sorted_binary_search(nums, start, mid - 1, targrt) if __name__ == '__main__':
s = Solution()
print(s.binary_search([1,2,3,4,5,6,7,8,9], 0, 8, 9))

代码中注释参考了:http://www.cnblogs.com/springfor/p/3858140.html , 该博客中的算法描述比较易懂

Leetcode-33-Search in Rotated Sorted Array (Hard)的更多相关文章

  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 33 Search in Rotated Sorted Array [binary search] <c++>

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

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

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

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

  6. LeetCode 33.Search in Rotated Sorted Array(M)

    题目: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. ( ...

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

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

  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(循环有序数组中进行查找操作)

    题目链接 :https://leetcode.com/problems/search-in-rotated-sorted-array/?tab=Description   Problem :当前的数组 ...

随机推荐

  1. .NET MVC4 实训记录之二(扩展WebSecurity模型下的UserProfile表)

    使用VS2013创建MVC4项目后,自动生成的代码中默认使用WebSecurity模型创建用户管理,生成以下数据库:

  2. Windows服务、批处理项目实战

    一周一话题之三(Windows服务.批处理项目实战)   -->目录导航 一. Windows服务 1. windows service介绍 2. 使用步骤 3. 项目实例--数据上传下载服务 ...

  3. SZU : A18 (Climb Well)

    Judge Info Memory Limit: 32768KB Case Time Limit: 10000MS Time Limit: 10000MS Judger: Number Only Ju ...

  4. 附加被分离DB

    如何附加被分离的质疑数据库?   简介 有些时间,由于日志损坏等原因,导致了数据库质疑.如果此时你分离了数据库,那你会发现你无法再附加上数据库,那后果还是很严重的.因此本文提供了一种方式,可以使得当数 ...

  5. EditPlus 3设置字体大小

    EditPlus设置字体大小 tools ---> preferences ---> fonts

  6. JavaScript插件——按钮

    Bootstrap3.0学习第二十四轮(JavaScript插件——按钮)   前言 阅读之前您也可以到Bootstrap3.0入门学习系列导航中进行查看http://www.cnblogs.com/ ...

  7. DevExpress 学习使用之 PrintSystem

    这是来自群里边的一段,收集起来,碎片知识是很珍贵的.  傷心孤影(2072201)  16:14:41导出excel加标题用PrintableComponentLink小宝(462561442)  1 ...

  8. JavaScript function函数种类介绍

    JavaScript function函数种类介绍 本篇主要介绍普通函数.匿名函数.闭包函数 1.普通函数介绍 1.1 示例 ? 1 2 3 function ShowName(name) {     ...

  9. 关于CKEditor.NET的安全性错误

    关于CKEditor.NET的安全性错误 一直以来在网站上使用FCKEditor.NET文本编辑器 版本应该算是比较早的一个 在使用过程中基本上没有出现什么问题 但是自服务器的IIS(同样都是IIS6 ...

  10. Supervisor 管理后台守护进程

    Supervisor 管理后台守护进程 参考原文如下: http://codinn.com/people/brant/notes/110948/ 做了一些注释 +++++++++++引用开始+++++ ...