博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
63. 搜索旋转排序数组 II
阅读量:7080 次
发布时间:2019-06-28

本文共 1596 字,大约阅读时间需要 5 分钟。

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

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

如何影响?

为何会影响?

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

 

样例

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

 

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

1 bool search(vector
&A, int target) { 2 // write your code here 3 vector
::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
&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]
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

你可能感兴趣的文章
ASP.NET:Session对并发访问的影响
查看>>
Insertion sort list
查看>>
centos7 安装java+tomcat
查看>>
Uncaught TypeError: form.attr is not a function 解决办法
查看>>
HDU 1023 Train Problem II( 大数卡特兰 )
查看>>
图片的画图板
查看>>
hdu5521 Meeting
查看>>
android学习笔记之handler(2)
查看>>
【LeetCode每天一题】Group Anagrams(变位词组)
查看>>
python学习笔记(五)文件操作和集合
查看>>
排错之网络映射缓存凭证记录导致备份计划任务失败
查看>>
转 jQuery插件Highcharts、flexigrid实践
查看>>
Windows Phone 8 SDK RC 版推出
查看>>
Database2Sharp代码生成工具使用心得
查看>>
稀疏矩阵的十字链表存储
查看>>
【算法导论第13章】红黑树
查看>>
对PostgreSQL中bufmgr.c 中 bufs_to_lap的初步理解
查看>>
Windows 内存分析之路 --How to use Resource Monitor
查看>>
文件上传
查看>>
理解maven的核心概念
查看>>