博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(算法)二分查找的搜索区间
阅读量:7052 次
发布时间:2019-06-28

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

题目:

给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置。

如果目标值不在数组中,则返回[-1, -1]

思路:

1、直接遍历数组,复杂度O(n)

2、二分查找

先通过二分查找,找到target出现的最左边的位置,如果不存在,返回-1;

再通过二分查找,找到target出现的最右边的位置,如果不存在,返回-1;

代码:

#include
#include
using namespace std;int searchLeft(const vector
&A,int left,int right,int target){ int first=left; int last=right; int mid=-1; while(first<=last){ mid=first+((last-first)>>1); if(A[mid]==target){ if(mid>left && A[mid-1]==target) last=mid-1; else return mid; } else if(A[mid]
&A,int left,int right,int target){ int first=left; int last=right; int mid=-1; while(first<=last){ mid=first+((last-first)>>1); if(A[mid]==target){ if(mid
&A,int left,int right,int target,int &start,int &end){ start=searchLeft(A,left,right,target); end=searchRight(A,left,right,target);}int main(){ int n; int start=-1; int end=-1; int target; while(cin>>n){ vector
num(n); for(int i=0;i
>num[i]; cin>>target; searchRange(num,0,n-1,target,start,end); cout<
<<" "<
<

 

转载地址:http://hwpol.baihongyu.com/

你可能感兴趣的文章
android使用notifyDataSetChanged()方法,listview数据没有更新
查看>>
MySQL中group_concat函数
查看>>
linux 学习笔记--磁盘管理
查看>>
SmartAuditor播放器不能搜索
查看>>
Weblogic10.3.6 for solaris10 x64安装
查看>>
eval解析JSON对象中的注意点
查看>>
为何有着良好设计的系统代码反而不容易看懂?
查看>>
Windows下Apache以FastCGI模式运行PHP
查看>>
Linux下无线网卡的安装
查看>>
Tomcat
查看>>
HBase的表结构
查看>>
10个你应该了解的Git命令(以及Git省时小窍门)
查看>>
PLSQL批量绑定插入数据
查看>>
Cesium入门9 - Loading and Styling Entities-加载和样式化实体
查看>>
node.js学习笔记三(安装外部node.js模块)
查看>>
我的友情链接
查看>>
Web应用系统开发课程(Jsp程序设计)资源列表
查看>>
浅谈微博营销公司的组织架构
查看>>
MDK4.23调试LPC1114时JLINK的设置
查看>>
SystemCenter2012SP1实践(8)私有云WEB平台SCAC
查看>>