leetcode第一刷_Search in Rotated Sorted Array
旋转数组的查找问题。从头開始扫一遍。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的更多相关文章
- 【一天一道LeetCode】#81. Search in Rotated Sorted Array II
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Follow ...
- 乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array
乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array 一.前言 将传统的问题进行一些稍微的变形,这个时候我们可能无所适从了,因此还是实践出真知, ...
- [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 ...
- 【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 ...
- 【leetcode】Find Minimum in Rotated Sorted Array II JAVA实现
一.题目描述 Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed ...
- [Leetcode][Python]33: Search in Rotated Sorted Array
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 33: Search in Rotated Sorted Arrayhttps ...
- 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解题报告—— 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 ...
- [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. ...
随机推荐
- java.lang.NoClassDefFoundError: org.springframework.beans.FatalBeanException
在进行Spring和Hibernate整合的时候遇到了这个问题, 问题描述如下 问题原因? Spring的Bean的XML配置文件存在错误 解决方法: 正确的配置XML文件,例如下面的代码 < ...
- React开发实时聊天招聘工具 -第四章 Redux
复杂以后 setState 就不太方便了 所以使用Redux来管理 React只负责View. Store.State.Dispatch.Reducer reducer(state,action) { ...
- Nginx出现403 forbidden (13: Permission denied)报错的四种原因
一.由于php-fpm启动用户和nginx工作用户不一致所致 php-fpm启动用户配置位置 nginx工作用户配置位置 二.不存在在文件,可能是文件路径有误,可以查看nginx错误日志来判断 三.缺 ...
- c++基础_杨辉三角形
#include <iostream> using namespace std; int main(){ int n; cin>>n; ][]; ;i<n;i++){ a ...
- PHP:Mysql 基础类
文章来源:http://www.cnblogs.com/hello-tl/p/7592547.html <?php /** * __construct($Mysql_config) 构造函数 $ ...
- Python Pandas库的学习(一)
今天我们来学习一下Pandas库,前面我们讲了Numpy库的学习 接下来我们学习一下比较重要的库Pandas库,这个库比Numpy库还重要 Pandas库是在Numpy库上进行了封装,相当于高级Num ...
- cadence中元件所在库
DISCRETE(分立元件)中 开关: 其中可供选择的这几个比较好 SW PUSHBUTTON SW PUSHBUTTON-DPST 数码管: LDD(开头) LTD(开头) 版权声明:本文为博主原创 ...
- Windows Server 2008 R2 Enterprise 安装.NET Framework 4.0
由于服务器上没有.NET 4.0 部署不了 4.0及以上版本的网站,所以给他安排一下: 复制下好的.NET Framework 4.0到服务器开始安装: 安装完,重新打开IIS,已经 ...
- 到达时间自动点击按钮弹出提示并跳转【JavaScript实现】
原文发布时间为:2008-10-11 -- 来源于本人的百度文章 [由搬家工具导入] 其实我本来是想 做 在线考试的时候 规定时间到达时候自动交卷的,就想到这个例子了。。。。 代码: <html ...
- SPOJ NSUBSTR (后缀自动机)
SPOJ NSUBSTR Problem : 给一个长度为n的字符串,要求分别输出长度为1~n的子串的最多出现次数. Solution :首先对字符串建立后缀自动机,在根据fail指针建立出后缀树,对 ...