[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. 题目要求 给定一个按升序排列的 ...
随机推荐
- 将Eclipse代码导入到Android Studio的两种方式
转: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0104/2259.html 说到使用Android Studio,除了新建 ...
- python基础(三)
set集合 set集合创建 #方式1: se = {'} #与字典类似dict1 = {'k1','v1','k2','v2'} #方式2: se = set() #创建一个空的集合 list1 = ...
- POJ——位查询
3:位查询 查看 提交 统计 提问 总时间限制: 5000ms 内存限制: 65536kB 描述 给出N个范围在[0, 65535]的整数,编程支持以下的操作: (1)修改操作:C d,所有的数 ...
- 行变列 拼接字符串 MSSQL 一个超级搞的问题
由数据 ThreeLevelSortID KeyWordID KeyWordName key1 key2 key3 key4 得到数据大 ThreeLevelSortID KeyWordName ke ...
- AndroidUI 视图动画-透明动画效果 (AlphaAnimation)
1.新建一个Android项目,Activity添加一个按钮如下代码: <Button android:id="@+id/btnAiphaAnimation" android ...
- JAVA布局管理器
JAVA的界面布局原理:由于Java是跨平台语言,使用绝对坐标显然会导致问题,即在不同平台.不同分辨率下的显示效果不一样.Java 为了实现跨平台的特性并且获得动态的布局效果,Java将容器内的全部组 ...
- iOS获取本地ip(基本通用)
今天有个朋友问我怎样訪问手机ip,上网找了几个,用了近200多行代码,最后发现头文件用的居然还是Linux中的,OC没有这个头文件.感觉socket本身应该能够后去自己的ip就试了一下,果然7.8行代 ...
- 自学Xpath的几个例子
Xpath可以对XML文件中的信息进行查找,并对XML文件树形结构进行遍历.详细语法请转:http://www.w3school.com.cn/xpath/index.asp 例子:利用在JavaSc ...
- apache pk nginx pk Lighttpd
apache: 历史: APACHE:于1994年发布,是apache软件基金会的一个开放源码的网页服务器,可以在多平台下运行,由于其多平台和安全性被广泛使用,是最流行的web服务器端软件之一:特点是 ...
- provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接
问题描述: SQL Sever2012 中:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为 ...