# -*- coding: utf8 -*-
'''
__author__ = 'dabay.wang@gmail.com' 33: Search in Rotated Sorted Array
https://oj.leetcode.com/problems/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. ===Comments by Dabay===
解法一:(可以过OJ)
首先判断是否应该从前往后,还是从后往前。
取决于和第一个数的判断,如果比第一个数小,就从后往前;如果比第一个数大,就从前往后。
注意一些继续循环的条件:
从前往后的时候:下标有效、递增、目标比上一个大
从后往前的时候:下标有效、递减、目标比上一个小 解法二:(二分查找)
把中位数标记出来。
如果中位数比左边大,说明左边是递增的,断点在右边:
如果target在左边递增的区间,就在左边查找;
否则,在右边查找
如果中位数比左边小,说明右边是递增的,断点在左边:
如果target在右边的递增区间,就在右边查找;
否则,在左边查找。 从跑的结果来看,对于小数据来说,解法一速度还快一点点。
''' class Solution:
# @param A, a list of integers
# @param target, an integer to be searched
# @return an integer
def search(self, A, target):
left, right = 0, len(A)-1
while left <= right:
if A[left] == target:
return left
if A[right] == target:
return right
m = (left + right) / 2
mid = A[m]
if mid == target:
return m
if mid > A[left]:
if A[left]< target and target < A[m]:
right = m - 1
else:
left = m + 1
else:
if A[m] < target and target < A[right]:
left = m + 1
else:
right = m - 1
else:
return -1 # def search(self, A, target):
# if len(A) == 1:
# return [-1, 0][A[0]==target]
#
# if A[0] == target:
# return 0
# elif A[0] < target:
# i = 1
# while i < len(A) and A[i-1] < A[i] and A[i-1] < target:
# if A[i] == target:
# return i
# i = i + 1
# else:
# return -1
# else:
# if A[-1] == target:
# return len(A) - 1
# i = len(A) - 2
# while i >= 0 and A[i] < A[i+1] and target < A[i+1]:
# if A[i] == target:
# return i
# i = i - 1
# else:
# return -1 def main():
s = Solution()
nums = [4,5,6,7,8,1,2,3]
print s.search(nums, 8) if __name__ == "__main__":
import time
start = time.clock()
main()
print "%s sec" % (time.clock() - start)

[Leetcode][Python]33: Search in Rotated Sorted Array的更多相关文章

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

  2. 【LeetCode】33. Search in Rotated Sorted Array (4 solutions)

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

  3. 【一天一道LeetCode】#33. Search in Rotated Sorted Array

    一天一道LeetCode 本系列文章已全部上传至我的github,地址: https://github.com/Zeecoders/LeetCode 欢迎转载,转载请注明出处 (一)题目 Suppos ...

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

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

  6. 【LeetCode】33. Search in Rotated Sorted Array 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  7. Python 解LeetCode:33. Search in Rotated Sorted Array

    题目描述:在一个旋转数组中查找给定的值,其中旋转数组中不含重复值: 思路: 第一遍二分遍历,找到数组中最小值的索引: 第二遍分别对最小值左右两边的数组进行二分查找: class Solution(ob ...

  8. 【Leetcode】33. Search in Rotated Sorted Array

    Question: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforeh ...

  9. LeetCode:33. Search in Rotated Sorted Array(Medium)

    1. 原题链接 https://leetcode.com/problems/search-in-rotated-sorted-array/description/ 2. 题目要求 给定一个按升序排列的 ...

随机推荐

  1. Android SDK 国内源-好用。

    proxy: mirrors.opencas.cn port : 80

  2. Linux下设置开机自启动Tomcat

    方法一: linux 下tomcat开机自启动修改Tomcat/bin/startup.sh 为: export JAVA_HOME=/usr/java/j2sdk1..2_08 export CLA ...

  3. Mirantis Fuel fundations

    Mirantis Nailgun is the most important service a RESTful application written in Python that contains ...

  4. libiconv_百度百科

    libiconv_百度百科   由于历史原因,国际化的文字常常由于语言或者国家的原因使用不同的编码.目录     1libiconv历史简介     2libiconv编码简介     3libico ...

  5. 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值

    实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个 值传递给B类中得某个值(所以需要在B类中先准备一个变量 ...

  6. [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so

    0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...

  7. TCP应用编程--套接字C#实现

     套接字之间的连接过程可以分为三个步骤: 1.服务器监听 2.客户端请求 3.连接确认 Ø服务器监听:是指服务器套接字并不定位具体的客户端套接字,而 是处于等待连接的状态,实时监控网络状态. Ø客户端 ...

  8. EBS-利用form个性化 调用报表【Z】

    1.在工具中添加调用报表的功能 条件: 触发器事件:WHEN-NEW-FORM-INSTANCE 活动: 类型为:菜单 菜单项:specialn n为1..6 菜单标签:打印xx报表 2.对speci ...

  9. 在IOS开发中,属性名为id的处理方法

    在.h 文件中定义属性名为id { int _id; } @property (nonatomic, assign) int id; 在.m 文件中用synthesize声明该属性,会自动生成get和 ...

  10. NavigationBar--修改返回按钮的标题

    UIBarButtonItem *backItem = [[[UIBarButtonItem alloc] init] autorelease]; backItem.title = @"返回 ...