旋转数组的查找问题。从头開始扫一遍。O(N)的复杂度,一般也能过,甚至先排序下面,再二分都能过。只是这道题的目的当然不在于此。

想一下旋转之后对我们的查找产生了什么影响。假设没旋转过,我们直接比較target与A[middle]的大小,然后总能很确定的丢掉源数组的一半。即把搜索空间减半,可是旋转之后,仅仅依据A[middle]是确定不了下一轮的走向的,由于即使A[middle]比target大,按理说我们应该往前找,可是假设源数组是循环左移的。较小的数可能在后半部分。

上面说的都是旋转之后与没旋转的差别,这个是非常easy想明确的,关键是旋转之后有什么没有变化呢?答案是不管怎么旋转,middle的左右部分肯定至少有一个是全然有序的。这个应该好理解。

怎么推断这一半是哪一半也非常简单。仅仅要看A[middle]跟A[0]和A[N]的大小关系就能够了。假设有序,我们就能够通过比較端点与target的大小来确定target应不应当在这一部分,假设不在的话,就递归查询还有一半。依据这个策略,就能够每次确定的丢掉一半了。时间复杂度也就降下来了。

不要忘记这个题有非常强的如果,数组中没有反复的元素,有反复元素的非常不一样。是下一道题的内容。

int msearch(int A[], int n, int target, int* a){
if(n<=0)
return -1;
int middle = n/2;
if(A[middle] == target)
return A-a+middle;
if(A[middle]>target){
if(A[0]<=target||A[0]>A[middle]){
return msearch(A, middle, target, a);
}else{
return msearch(A+middle+1, n-middle-1, target, a);
}
}else{
if(A[0]<=A[middle]||A[n-1]>=target)
return msearch(A+middle+1, n-middle-1, target, a);
else{
return msearch(A, middle, target, a);
}
}
} class Solution {
public:
int search(int A[], int n, int target) {
return msearch(A, n, target, A);
}
};

leetcode第一刷_Search in Rotated Sorted Array的更多相关文章

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

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

  2. 乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array

    乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array 一.前言     将传统的问题进行一些稍微的变形,这个时候我们可能无所适从了,因此还是实践出真知, ...

  3. [LeetCode] 154. Find Minimum in Rotated Sorted Array II 寻找旋转有序数组的最小值 II

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

  4. 【leetcode】Find Minimum in Rotated Sorted Array I&&II

    题目概述: Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 ...

  5. 【leetcode】Find Minimum in Rotated Sorted Array II JAVA实现

    一.题目描述 Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed ...

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

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

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

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

  9. [LeetCode] 154. Find Minimum in Rotated Sorted Array II 寻找旋转有序数组的最小值之二

      Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i. ...

随机推荐

  1. Conv1D和Conv2D的区别

    我的答案是,在Conv2D输入通道为1的情况下,二者是没有区别或者说是可以相互转化的.首先,二者调用的最后的代码都是后端代码(以TensorFlow为例,在tensorflow_backend.py里 ...

  2. 如何手写一款KOA的中间件来实现断点续传

    本文实现的断点续传只是我对断点续传的一个理解.其中有很多不完善的地方,仅仅是记录了一个我对断点续传一个实现过程.大家应该也会发现我用的都是一些H5的api,老得浏览器不会支持,以及我并未将跨域考虑入内 ...

  3. struts2与常用表格ajax操作的json传值问题

    struts与常用的dataTables和jqueryGrid等表格进行ajax传值时,经常会传值不适配的问题,这是因为struts在进行ajax操作时已经对你要操作的json数据进行了处理,所以不需 ...

  4. 2018湖南省第14届大学生计算机程序设计竞赛 A字符画

    Description 读入 w,请输出 2018 的字符画,两个数字之间有 w 个空格.具体格式请参考样例输出. 1 ≤ w ≤ 2018 Input 输入文件只包含 1 个整数 w. Output ...

  5. js 技巧 (四)

    //下载文件 function DownURL(strRemoteURL,strLocalURL) { try {   var xmlHTTP=new ActiveXObject("Micr ...

  6. 基于Vue的简单日历组件

    日历组件 由于移动端项目中需要用到日历组件,网上找了下,没看到几个合适的,就尝试着自己写一个.然后发现也不是很复杂,目前只做了最基本的功能,大家也可以拿去做做二次开发. 如何写一个日历组件 基础效果如 ...

  7. Oracle 实现查询不区分大小写(SQL实现)

    转为小写  LOWER('ABC') 结果 abc转为大写  UPPER('aBc') 结果 ABC 将数据库字段数据和前台接受的值全部转换为大写或者小写 例: select * from table ...

  8. (转载)C++ string中find() ,rfind() 等函数 用法总结及示例

    string中 find()的应用  (rfind() 类似,只是从反向查找) 原型如下: (1)size_t find (const string& str, size_t pos = 0) ...

  9. bootloader的移植

    jz2440开发板 在介绍bootloader里边的内容的时候,需要知道的是: bootloader的引入的目的就是启动linux内核,一个简单的bootloader编写需要以下的步骤: ①初始化硬件 ...

  10. Qt笔记——各种组件和其他细碎用法

    LineEdit 获取文本:ui->usrLineEdit->text() 清空内容:ui->pwdLineEdit->clear(); 定位光标:ui->usrLine ...