Search in Rotated Sorted Array II

Total Accepted: 18500 Total
Submissions: 59945My Submissions

Follow up for "Search in Rotated Sorted Array":

What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Write a function to determine if a given target is in the array.

题意:一个已经排序好的数组。被按某个位置旋转了一次,给定一个值target,在该旋转后的数组里查找该值。(数组中的元素可能反复)

思路:二分查找

难点在于确定往数组的哪一半段继续二分查找

设起点、中间点、终点分别为 start、middle、end (採用前闭后开的区间表示方法

假设target = A[middle] return middle

假设A[middle] > A[start],则[start,middle)单调递增

1.假设target < A[middle] && target >= A[start],则 end = middle

2.start = middle + 1, otherwise

假设A[middle] < A[start],则[middle,end)单调递增

1.假设target > A[middle] && target <= A[end - 1],则 start = middle + 1

2.end = middle, otherwise

假设A[middle] == A[start]。那A[start]也不会是target,能够通过start++; 去掉A[start]





复杂度:时间O(n),空间O(1)

  1. int search(int A[], int n, int target){
  2. int start = 0, end = n, middle ;
  3. while(start < end){
  4. middle = (start + end) / 2;
  5. if(A[middle] == target) return middle;
  6. if(A[middle] > A[start]){
  7. if(target >= A[start] && target < A[middle]){
  8. end = middle;
  9. }else{
  10. start = middle + 1;
  11. }
  12. }else if(A[middle] < A[start]){
  13. if(target > A[middle] && target <= A[end - 1]){
  14. start = middle + 1;
  15. }else{
  16. end = middle;
  17. }
  18. }
  19. else{
  20. ++start;
  21. }
  22. }
  23. return -1;
  24. }

leetcode 二分查找 Search in Rotated Sorted ArrayII的更多相关文章

  1. leetcode 二分查找 Search in Rotated Sorted Array

    Search in Rotated Sorted Array Total Accepted: 28132 Total Submissions: 98526My Submissions Suppose ...

  2. Search in Sorted Array,Search in Rotated Sorted Array,Search in Rotated Sorted ArrayII

    一:Search in Sorted Array 二分查找,可有重复元素,返回target所在的位置,只需返回其中一个位置,代码中的查找范围为[low,high),左闭右开,否则容易照成死循环. 代码 ...

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

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Follow ...

  4. leetcode 题解:Search in Rotated Sorted Array II (旋转已排序数组查找2)

    题目: Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would t ...

  5. LeetCode OJ:Search in Rotated Sorted Array II(翻转排序数组的查找)

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  6. leetcode解题报告(4):Search in Rotated Sorted ArrayII

    描述 Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would t ...

  7. [Leetcode][Python]33: Search in Rotated Sorted Array

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 33: Search in Rotated Sorted Arrayhttps ...

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

  9. LeetCode解题报告—— Search in Rotated Sorted Array & Search for a Range & Valid Sudoku

    1. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated(轮流,循环) at so ...

随机推荐

  1. 第1天:Django框架简介与工程创建

    Django简介 Django特点 环境搭建 创建工程 启动服务 使用pycharm打开工程 创建子应用 Django简介 Django,是用Python语言写的开源web开发框架,并遵循MVC设计. ...

  2. php异步实现,避免长时间等待

    处理的php异步的方法有好几种,这里我就只介绍我经常用的而且官方也推荐的 废话少说,直接贴代码 //php异步 public function doRequest($host,$path, $para ...

  3. luoguP4783 [模板]矩阵求逆 线性代数

    求\(n^2\)的矩阵的逆 翻了翻题解,看到了初等矩阵这个东西,突然想起来在看线代的时候看到过.... 然后又温习了一遍线性代数的知识 不妨设\(PA = E\),其中\(P\)是一堆初等矩阵的积(必 ...

  4. Git 历险记

    Git历险记(一) 作为分布式版本控制系统的重要代表--Git已经为越来越多的人所认识,它相对于我们熟悉的CVS.SVN甚至同时分布式控制系统的Mercurial,有哪些优势和不足呢.这次InfoQ中 ...

  5. SmartGit 授权文件 Free Trial License to Non-Commercial

    To alter the license. First, go to Windows: %APPDATA%\syntevo\SmartGit\ OS X:    ~/Library/Preferenc ...

  6. python开发_webbrowser_浏览器控制模块

    ''' python的webbrowser模块支持对浏览器进行一些操作 主要有以下三个方法: webbrowser.open(url, new=0, autoraise=True) webbrowse ...

  7. jquery.uploadify 使用过程

    HTML: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"& ...

  8. Linux线程 之 线程 线程组 进程 轻量级进程(LWP) -systemtap -mysql

    http://blog.chinaunix.net/uid-24774106-id-3650136.html http://blog.itpub.net/15480802/viewspace-7627 ...

  9. mysql安装三 linux源码安装mysql5.6.22

    http://blog.csdn.net/beiigang/article/details/43053803

  10. jsp页面传递参数是如何与javabean进行关联的

    总结:1.severlet容器是通过JavaBean中的属性方法名来获取属性名的,然后根据此属性名来从request中取值 2.JavaBean中属性方法的命名,set后的名称要与你从request中 ...