[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. 题目要求 给定一个按升序排列的 ...
随机推荐
- ZRender源码分析3:Painter(View层)-上
回顾 上一篇说到:ZRender源码分析2:Storage(Model层),这次咱看来看看Painter-View层 总体理解 Painter这个类主要负责MVC中的V(View)层,负责将Stora ...
- IScroll5+在ios、android点击(click)事件不兼容解决方法
Bug描述: ios.android4.4+下不能触发click事件. Bug解决: 调用iscroll插件,增加配置参数:click:true/false click的值是要根据移动终端设备进行判断 ...
- android玩耍(-) adbshell安装
一 什么是adbshell http://adbshell.com/ Android Debug Bridge (adb) is a command line tool that lets you c ...
- C++进程间通信(常用理解例子)-买票
#include "stdafx.h" #include <iostream>using namespace std; #include "windows.h ...
- jQuery代码不能执行,必须在代码之前就要包含jQuery包
<script> $(function () { $("#btnRegister").click(function () { ...
- 再度分(tu)析(cao)Egret这个年轻人
写在最前 笔者用Egret来开发游戏已经有2年多之久了,从它出现到如今的3.2.x版本,经历了很多很多,也做了很多类型的游戏了,关键是踩了很多很多坑. 很多网友问我Egret有哪些优劣,我也只是说了一 ...
- linux学习(二)-目录的操作命令
Linux命令大全:http://www.jb51.net/linux/ 目录分绝对路径和相对路径 : 绝对路径,在路径前会加 / 相对路径就是相对于当前的路径,直接 路径名即可. 查看目录: cd ...
- string 转换char类型
将string转换成char类型 const char *c = string.c_str() char转换string char *c_name = "char" string ...
- uva 10306 - e-Coins(完全背包)
题目链接:10306 - e-Coins 题目大意:给出m和s, 再给出m种电子硬币,每种硬币有两种金额xi,yi.现在要在m种硬币种选若干个硬币,可以重复选同一种硬币, 使得(x1 + x2 + . ...
- [UI]抽屉菜单DrawerLayout分析(三)
在[UI]抽屉菜单DrawerLayout分析(一)和[UI]抽屉菜单DrawerLayout分析(二)中分别介绍了DrawerLayout得基本框架结构和ViewDragerHelper的作用以及手 ...