leetcode第33题--Search for a Range
2024-10-01 06:14:32
Given a sorted array of integers, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1]
.
For example,
Given [5, 7, 7, 8, 8, 10]
and target value 8,
return [3, 4]
.
给的那个一个有序数组和一个目标target,找到这个目标在有序数组里的开始和结束的下标。如果不存在就返回 -1 -1。注,如果数组中目标值只有一个,那就返回两个相同的下标。
用binary search找到target 然后再在左边binary search找到左边(包括mid)第一个目标,记录下标。再在右边binary 找到最后一个目标。记录下标。返回。
代码如下:
class Solution {
public:
vector<int> searchRange(int A[], int n, int target)
{
vector<int> wr, ans;
wr.push_back(-1); // 要学会可以用 vector<int> wr(2,-1);直接将其初始化为想要的
wr.push_back(-1);
if(n == 0)
return wr; int l = 0, r = n -1, mid = 0;
while(l <= r)
{
mid = (l+r)/2;
if (A[mid] < target) // 如果mid小于target那么可以把左边一块去掉
{
l = mid + 1;
continue;
}
if (A[mid] > target) // 如果mid大于target那么可以把右边一块去掉
{
r = mid -1;
continue;
}
if (A[mid] == target)// mid 找到了刚好,那就肯定在这里面要有return,如果一直没有找到,跳出while后就返回wr
{
// find start from l to mid,binary search
int start = l, l_r = mid; // l_r指mid左边的最右
while(l <= l_r)
{
int tmp_mid = (l + l_r)/2;
if(A[tmp_mid] != target)
{l = tmp_mid + 1;}
if(A[tmp_mid] == target)
{l_r = tmp_mid - 1; start = tmp_mid;}
}
ans.push_back(start);
// find end from mid to r,binary search
int r_l = mid, End = mid; // r_l指mid右边的最左
while(r_l <= r)
{
int tmp_mid = (r_l + r)/2;
if(A[tmp_mid] != target)
{r = tmp_mid - 1;}
if(A[tmp_mid] == target)
{r_l = tmp_mid + 1; End = tmp_mid;}
}
ans.push_back(End);
return ans;
}
}
return wr;
}
};
最新文章
- 关于kali2.0 rolling无法连接数据的解决办法
- window.onload和window.document.readystate的探究
- Python学习资料汇总
- chrome调试文章
- Express ejs 3.* layout.ejs
- Egret
- linux制作livecd
- 在java中HttpServletResponse响应中文出现乱码。
- leetcode&mdash;Best Time to Buy and Sell stocks III
- 构建混合云:配置Azure site to site VPN连接(1)
- adb 卸载android系统程序
- 【java设计模式】【行为模式Behavioral Pattern】策略模式Strategy Pattern
- lua变量作用域
- BootstrapTable使用实例
- CentOS 7使用yum安装SNMP教程
- Log4j 日志记录
- 怎么让链式调用setTimeout停止
- 使用librtmp进行H264与AAC直播
- mysql数据库的数据类型及约束
- 那些恶心人的Screen基本概念
热门文章
- 使用php+swoole对client数据实时更新(二) (转)
- Androids含文档erver结束(工具包 Httputils)两
- Initialising Memories
- JS前端正则表达式学习笔记(转)
- hdu 1025 Constructing Roads In JGShining’s Kingdom 【dp+二分法】
- poj 1061青蛙的约会
- UBUNTU如何改变mysql默认文件夹数据文件夹
- java7 语法糖 之 switch 声明string
- TableLayout中stretchColumns、shrinkColumns的使用方法
- unity3d NGUI入门(描述和使用插件参数)