上一页下一页,找到相同的旋转阵列的问题。假设数组元素一再怎么办呢?会发生什么?

我给大家举一个极端的例子。如果是这样的阵列中的元件。1,1,2,1,1,1,1,我们想看看这个数组2,刚开始A[middle]=1,发现超过target小,然后我们来看看A[0]和A[N],发现都跟A[middle]相等,那么这个2究竟在哪一半中?仅仅有上帝知道,如果他老人家真的存在的话。这种时候我们怎么办呢?没有其它的办法,仅仅能从头開始乖乖的扫描。直到发现target或者确定他不存在。

为什么会出现这样的情况。或者说包括反复元素跟不包括反复元素在本质上有什么差别呢?这样的差别又是如何影响复杂度的呢?我认为差别在于,当A[middle]与两头的元素相等时,我们没法找到一半有序的元素,因此我们也就没法通过比較边界来确定target在不在这一半元素之中,也就是我们在每一轮的判定中,无法确定的扔掉一半元素,最坏情况下的复杂度自然就提高到了O(N)。

编码上没有太大的差别,仅仅要当与两头元素都相等时,就仅仅移动左边的指针,逐个扫描过来,须要注意的是,每次移动时要判定这个值是否跟target的相等。

class Solution {
public:
bool search(int A[], int n, int target) {
int l = 0, r = n-1, mid;
while(l<=r){
mid = (l+r)/2;
if(A[mid] == target) return true;
if(A[l]<A[mid]){
if(target>=A[l]&&target<A[mid])
r = mid-1;
else
l = mid+1;
}else if(A[mid]<A[r]){
if(target>A[mid]&&target<=A[r])
l = mid+1;
else
r = mid-1;
}else{
if(A[l] == target) return true;
else l++;
}
}
return false;
}
};

版权声明:本文博主原创文章。博客,未经同意,不得转载。

leetcode先刷_Search in Rotated Sorted Array II的更多相关文章

  1. LeetCode 81 Search in Rotated Sorted Array II [binary search] <c++>

    LeetCode 81 Search in Rotated Sorted Array II [binary search] <c++> 给出排序好的一维有重复元素的数组,随机取一个位置断开 ...

  2. 【leetcode】Search in Rotated Sorted Array II

    Search in Rotated Sorted Array II Follow up for "Search in Rotated Sorted Array":What if d ...

  3. [leetcode]81. Search in Rotated Sorted Array II旋转过有序数组里找目标值II(有重)

    This is a follow up problem to Search in Rotated Sorted Array, where nums may contain duplicates. 思路 ...

  4. Java for LeetCode 081 Search in Rotated Sorted Array II

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

  5. [LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索 II

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

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

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

  7. LeetCode Find Minimum in Rotated Sorted Array II

    原题链接在这里:https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/ 题目: Follow up for &qu ...

  8. LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)

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

  9. 【LeetCode】Search in Rotated Sorted Array II(转)

    原文链接 http://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/ http://blog.csdn.net/linhuan ...

随机推荐

  1. 转帖Jmeter中的几个重要测试指标释义

    Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅. 如果 ...

  2. HDOJ 3415 Max Sum of Max-K-sub-sequence(单调队列)

    因为是circle sequence,可以在序列最后+序列前n项(或前k项);利用前缀和思想,预处理出前i个数的和为sum[i],则i~j的和就为sum[j]-sum[i-1],对于每个j,取最小的s ...

  3. php多图合并

    function mergerImg($imgs) { list($max_width, $max_height) = getimagesize($imgs['dst']); $dests = ima ...

  4. 11.PHP 教程_PHP Switch 语句

    switch 语句用于根据多个不同条件执行不同动作. PHP Switch 语句 如果您希望有选择地执行若干代码块之一,请使用 switch 语句. 语法 switch (n) { case labe ...

  5. c++ bitset使用

    A bitset is a special container class that is designed to store bits (elements with only two possibl ...

  6. Ubuntu离线安装软件包

    一.应用场景 a.当我们需要在多台电脑安装同一个软件,并且这个软件很大,下载需要很长时间时 b.需要安装软件的ubuntu不能上网 二.离线安装包的制作 2.1.通过如下指令下载XXXX软件所需要的d ...

  7. Noip2007提高组总结

    两道基础题,后两题比较麻烦,算法想出来后,还是一些细枝末节的问题,需要特别注意,感觉Noip的题目质量还是挺高的,每做一套,都感觉会有大大小小不同的收获,就要月考了,最后把07年的题目总结一下,算是这 ...

  8. Spring 面试复习

    1   singleton 和 prototype singleton作用域:当把一个Bean定义设置为singleton作用域是,Spring IoC容器中只会存在一个共享的Bean实例,并且所有对 ...

  9. Special Subsequence(离散化线段树+dp)

    Special Subsequence Time Limit: 5 Seconds      Memory Limit: 32768 KB There a sequence S with n inte ...

  10. VS快捷键简单记录

    代码上下移动行:Alt+上下键 跳转相等大括号:Ctrl+]