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

我给大家举一个极端的例子。如果是这样的阵列中的元件。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. Ubuntu Git安装

    Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.通过使用git工具,我们可以实现团队间合作开发统一管理,可以从远程仓库中提取代码,也可以把代码上传到远程仓库,从而实现 ...

  2. C#隐藏桌面图标和任务栏

    最近因为项目需要需要实现桌面图标和任务状态栏的隐藏功能,实现的方式很多,比如修改注册表值,调用windows API函数等.经过一番的查阅,这个功能暂时实现了,或许不是很好的方法,但是我预期的效果达到 ...

  3. C# 自定义控件的一些文章和博客

    http://blog.csdn.net/songkexin/archive/2009/12/08/4961215.aspx http://www.cnblogs.com/yuanfan/archiv ...

  4. PHP将Excel导入数据库以及数据库数据导出至Excel

    一.导入 导入需要使用能读取Excel的组件,网上也有比较好的组件,这里分享我使用的:下载  提取码:vxyn.(注意两个文件有引用关系) <?php //传入要导入的Excel的文件名 fun ...

  5. 帝国cms后台 不同栏目发布字段不同

    在同一数据表下的两个栏目,由于功能不同,也需要建立不同的字段,问题是建立完不同字段后,其数据表下的两个栏目都有发布字段.这里教大家,不同栏目下发布内容,不同字段.修改数据模型中 录入表单模板 代码.底 ...

  6. python开发_大小写转换,首字母大写,去除特殊字符

    这篇blog主要是总结我们在平常开发过程中对字符串的一些操作: #字母大小写转换 #首字母转大写 #去除字符串中特殊字符(如:'_','.',',',';'),然后再把去除后的字符串连接起来 #去除' ...

  7. 使用libcurl POST数据和上传文件

    为了具有通用性,将文件的内容读到了fc变量中,fclen是fc的长度.fc也可以是任何其它内容.curl 是 libcurl句柄.演示省略了很多显而易见的步骤.   1. 普通的post请求,这里用c ...

  8. BZOJ 1022 小约翰的游戏 (Anti-Nim游戏)

    题解:注意题目中规定取到最后一粒石子的人算输,所以是Anti-Nim游戏,胜负判断为: 先手必胜: 1.所有堆的石子数都为1且游戏的SG值为0: 2.有些堆的石子数大于1且游戏的SG值不为0. #in ...

  9. HDU 1847 Good Luck in CET-4 Everybody!

    题解:巴什博弈,2^k+1=3N或2^k2=3N,所以3N为P-position,3N+r为N-position. #include <cstdio> int main(){ int n; ...

  10. La=LaULb (循环链表)

    #include<stdio.h> typedef struct LNode { int data; struct LNode *next; }LNode,*LinkList; void ...