当前位置: 首页 > news >正文

63. 搜索旋转排序数组 II

跟进“搜索旋转排序数组”,假如有重复元素又将如何?

是否会影响运行时间复杂度?

如何影响?

为何会影响?

写出一个函数判断给定的目标值是否出现在数组中。

 

样例

给出[3,4,4,5,7,0,1,2]和target=4,返回 true

 

发现lintcode有一点不好就是这种O(n)的解法也能给过

 1 bool search(vector<int> &A, int target) {
 2         // write your code here
 3         vector<int>::iterator it=A.begin();
 4         while(it!=A.end()){
 5             if(target==*it){
 6                 return true;
 7             }
 8             it++;
 9         }
10         return false;
11     }

应该给个超时什么的

下面来个正经的吧

 1 bool search(vector<int> &A, int target) {
 2         int left=0,right=A.size()-1;
 3         int mid;
 4         while(left<=right){
 5             mid=(right+left)/2;
 6             if(target==A[mid]){
 7                 return true;
 8             }
 9             if(A[mid]>A[left]){//left->mid之间有序
10                 if(A[left] <= target && target < A[mid]) {
11                     right = mid - 1;
12                 }
13                 else{
14                     left = mid + 1;
15                 }
16             }
17             else if(A[mid]<A[left]){//mid->right之间有序
18                 if(A[mid] < target && target <= A[right])  {
19                     left = mid + 1;
20                 }
21                 else  {
22                     right = mid - 1;
23                 }
24             }
25             else{//mid->right之间相同
26                 left++;
27             }
28         }
29         return false;
30     }

在原先代码上略加修改,除了将返回类型改成对应的bool值之外,还要注意A[mid]==A[left]的情况,这也是这一题与上一题的主要区别

如果相同,说明后半全是相同元素,那么接着顺着找就行了

转载于:https://www.cnblogs.com/TheLaughingMan/p/8226162.html

相关文章:

  • JAVA NIO知识点总结(6)——DatagramChannel
  • addEventListener()的第三个参数可以传对象了
  • 11.11. SNMP
  • [2018-01-08] Python强化周的第一天
  • Zabbix备份数据文件
  • Shell 输入/输出重定向
  • 通用汽车新增130辆测试无人车,配激光雷达
  • 了解Web及网络基础(二)
  • 拉格朗日插值
  • HomeBrew常规使用教程
  • 递归函数的写法笔记
  • mysql手写sql 建库建表示例
  • Eonasdan bootstrap datetimepicker 使用记录
  • 新版本Jenkins安装时显示离线的问题
  • WEBGL学习【十四】利用HUD技术在网页上方显示三维物体
  • $translatePartialLoader加载失败及解决方式
  • (三)从jvm层面了解线程的启动和停止
  • 《深入 React 技术栈》
  • 03Go 类型总结
  • 2017届校招提前批面试回顾
  • E-HPC支持多队列管理和自动伸缩
  • ES2017异步函数现已正式可用
  • httpie使用详解
  • Linux快速复制或删除大量小文件
  • mysql常用命令汇总
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • overflow: hidden IE7无效
  • Python - 闭包Closure
  • Spring-boot 启动时碰到的错误
  • zookeeper系列(七)实战分布式命名服务
  • 如何优雅地使用 Sublime Text
  • 实现菜单下拉伸展折叠效果demo
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 我的业余项目总结
  • 我是如何设计 Upload 上传组件的
  • 大数据全解:定义、价值及挑战
  • 容器镜像
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • (13):Silverlight 2 数据与通信之WebRequest
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (安卓)跳转应用市场APP详情页的方式
  • (二)WCF的Binding模型
  • (二)构建dubbo分布式平台-平台功能导图
  • (数据结构)顺序表的定义
  • (一)SpringBoot3---尚硅谷总结
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (转载)从 Java 代码到 Java 堆
  • (轉)JSON.stringify 语法实例讲解
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .net 反编译_.net反编译的相关问题
  • /etc/shadow字段详解
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例