[Leetcode][Python]33: Search in Rotated Sorted Array
# -*- 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的更多相关文章
- 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 ...
- 【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 ...
- 【一天一道LeetCode】#33. Search in Rotated Sorted Array
一天一道LeetCode 本系列文章已全部上传至我的github,地址: https://github.com/Zeecoders/LeetCode 欢迎转载,转载请注明出处 (一)题目 Suppos ...
- 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 ...
- 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 ...
- 【LeetCode】33. Search in Rotated Sorted Array 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- Python 解LeetCode:33. Search in Rotated Sorted Array
题目描述:在一个旋转数组中查找给定的值,其中旋转数组中不含重复值: 思路: 第一遍二分遍历,找到数组中最小值的索引: 第二遍分别对最小值左右两边的数组进行二分查找: class Solution(ob ...
- 【Leetcode】33. Search in Rotated Sorted Array
Question: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforeh ...
- LeetCode:33. Search in Rotated Sorted Array(Medium)
1. 原题链接 https://leetcode.com/problems/search-in-rotated-sorted-array/description/ 2. 题目要求 给定一个按升序排列的 ...
随机推荐
- 编译php时,出错bad interpreter
安装php,参数有--with-apxs2.出现错误bad interpreter,原因是apache的apxs的文件需要perl的支持,首先要安装perl,然后修改apxs第一行,把第一行的#!/r ...
- Sublime Text2使用技巧
推荐Lucifr和JerryQu的几篇博文: Sublime Text 2 入门及技巧 via: http://lucifr.com/139225/sublime-text-2-tricks-and- ...
- Linux查看所有用户用什么命令1
用过Linux系统的人都知道,Linux系统查看用户不是会Windows那样,鼠标右键看我的电脑属性,然后看计算机用户和组即可. 那么Linux操作系统里查看所有用户该怎么办呢?用命令.其实用命令 ...
- Oracle EBS-SQL (WIP-4):检查检查成品标准作业是否勾选"固定"标识.sql
select WE.DESCRIPTION 任务说明, ...
- ubuntu下C编程,编译基础( 转)
buntu下C编程,编译基础 C 编程中相关文件后缀 .a 静态库 (archive) .c C源代码(需要编译预处理) .h C源代码头文件 .i C源代码(不需编译预处理) .o 对象文件 ...
- mysql memcache
http://blog.csdn.net/newjueqi/article/details/8350643
- 使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法
1. 简要说明 JLink的调试功能.烧写Flash的功能都很强大,但是对于S3C2410.S3C2440的Flash操作有些麻烦:烧写Nor Flash时需要设置SDRAM,否则速率很慢:烧写Nan ...
- 一步一步学习SignalR进行实时通信_4_Hub
原文:一步一步学习SignalR进行实时通信_4_Hub 一步一步学习SignalR进行实时通信\_4_Hub SignalR 一步一步学习SignalR进行实时通信_4_Hub 前言 创建Hub 配 ...
- 触发按钮改变panel面板上的小圆圈颜色
import javax.swing.*; import java.awt.event.*; import java.awt.*; public class TouChaCol implements ...
- nginx源代码分析--配置文件解析
ngx-conf-parsing 对 Nginx 配置文件的一些认识: 配置指令具有作用域,分为全局作用域和使用 {} 创建其他作用域. 同一作用域的不同的配置指令没有先后顺序:同一作用域能否使用同样 ...