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

#!/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. 数据类型和typeof操作符

    虽然学习js有一段时间了,但是对js的基础语法却是有些生疏.最近在看jquery源码,决定随带总结一些基础的语法知识.今天总结一下数据类型和typeof,这在写js的时候,是不得不知道的知识. 数据类 ...

  2. Asp.Net MVC5入门学习

    添加一个Controller(控制器) 因为我们用的是Asp.Net MVC,MVC最终还是一套框架,所以我们还是需要遵循它才能玩下去,或者说是更好的利用来便于我们的开发,要是对MVC概念还有点模糊的 ...

  3. Oracle组函数、多表查询、集合运算、数据库对象(序列、视图、约束、索引、同义词)等

    count组函数:(过滤掉空的字段) select count(address),count(*) from b_user max() avg() min(),sum() select sum(age ...

  4. Confluence, JIRA, Fisheye

    [tools]迁移Confluence, JIRA, Fisheye   [背景] 原先的Confluence, JIRA, Fisheye都部署在一台服务器(192.168.200.203)上,导致 ...

  5. 记录OC学习的一点一滴(一)

    练习代码: 代码一:(面向过程的OC) // // main.m // Class01Test01 // // Copyright (c) 2014年 levi. All rights reserve ...

  6. messageBox以及新窗体的使用

    DialogResult dr = MessageBox.Show("你确定要点击吗", "安全提示", MessageBoxButtons.YesNo);   ...

  7. c# in deep 之Lambda表达式

    从很多方面,Lambda表达式都可以看作是C# 2的匿名方法的一种演变.匿名方法能做的几乎一切事情都可以用Lambda表达式来完成,而且其更简洁.易读.下面是一个简单例子. class Film    ...

  8. Apache指南:CGI动态页面

    概要 相关模块 相关指令 mod_alias mod_cgi AddHandler Options ScriptAlias CGI(公共网关接口[Common Gateway Interface])定 ...

  9. 2013集训.DAY21.A

    随便点了一套刷,这套质量挺棒的,学了不少的东西,并且碰到了很久都没有打的题目 T1 card [指针技巧] 题1 集卡片 [问题描述] lzh小时候很喜欢收集卡片,他经常要去商店购买新到的卡片. 商店 ...

  10. P2P中的NAT穿越方案简介

    文章链接: http://www.shipin.it/Index/videolist/id/68.html