首页 > 其他分享 >二分查找数据边界

二分查找数据边界

时间:2023-12-10 11:11:06浏览次数:22  
标签:二分 right target nums int mid 查找 left 边界

题目

在排序数组中查找元素的第一个和最后一个位置
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。

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

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]
示例 2:

输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]
示例 3:

输入:nums = [], target = 0
输出:[-1,-1]

答案

class Solution {
public:
vector searchRange(vector& nums, int target) {
vector res(2,-1);
if(nums.empty()){
return res;
}
int left = 0,right = nums.size() -1;
int mid = left + (right - left) / 2;
while(left < right){
mid = left + (right - left) / 2;
if(nums[mid] > target){
right = mid -1;
}
else if(nums[mid] < target){
left = mid + 1;
}
else{
break;
}
}
mid = left + (right - left) / 2;
for(int i=mid;i>=0;i--){
if(nums[i] == target){
res[0] = i;
}
else{
break;
}
}
for(int i=mid;i<nums.size();i++){
if(nums[i] == target){
res[1] = i;
}
else{
break;
}
}
return res;

}
};
我这里是olog + on可能慢一些

标签:二分,right,target,nums,int,mid,查找,left,边界
From: https://www.cnblogs.com/minipython-wldx/p/17892285.html

相关文章

  • 【JavaSE】数据结构(树:二叉查找树、平衡二叉树、AVL树、红黑树)
    树度:每个节点的子节点数量树高:树的总层数根节点:入度为0的节点二叉树每个节点最多有两个子节点二叉查找树任意节点左子树上的节点都小于当前节点,右子树上的节点都大于当前节点平衡二叉树任意节点的左右子树的高度差不超过1AVL树AVL树是一种平衡二叉树,得名于其发明者的......
  • 二分图
    定义节点由两个集合组成两个集合内部没有边的图换言之,存在一种方案,将节点划分成满足以上性质的两个集合性质如果两个集合中的点分别染成黑色和白色,可以发现二分图中的每一条边都一定是连接一个黑色点和一个白色点二分图不存在长度为奇数的环为什么?因为每一条边都是从......
  • 二分图最大权完美匹配
    时间复杂度为Θ(n^3)constintinf=0x3f3f3f3f;constintN=505;longlongw[N][N];longlongla[N],lb[N];boolva[N],vb[N];longlongmatch[N];longlongn,m,upd[N];longlonglast[N];booldfs(intx,intfa){va[x]=1;for(inty=1;y<=n;y++){......
  • 第八次课堂讲了文件查找,打包压缩及解压
    1.echo命令可以查看变量PATH的值[root@qfedu~]#echo$PATH2.使用which命令在环境变量PATH设置的目录中查找符合条件的命令文件,可查看其是否存在以及执行的位置[root@qfedu~]#whichuseradd/usr/sbin/useradd[root@qfedu~]#qfedu3.把PATH变量重新定义为/[root@qfedu~]#PATH=/[......
  • 二分图
    染色法判别二分图——模板题AcWing860.染色法判定二分图时间复杂度是\(O(n+m)\),\(n\)表示点数,\(m\)表示边数intn;//n表示点数inth[N],e[M],ne[M],idx;//邻接表存储图intcolor[N];//表示每个点的颜色,-1表示未染色,0表示白色,1表示黑色//......
  • 金牌导航-二分图匹配
    金牌导航-二分图匹配例题A题解将行和列相匹配,跑最小割即可。例题A代码#include<bits/stdc++.h>usingnamespacestd;inlineintread(){intx=0,f=1;charch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();......
  • 二分——acwing算法基础课笔记
    个人笔记,欢迎补充、指正。此次完全以个人理解来写。整数二分 整数二分有两种,分别是找左边界和找右边界。 寻找符合要求的左边界:绿色点intbsearch_1(intl,intr){while(l<r){intmid=l+r>>1;//对应下界,最左if(check(mid))r=......
  • 超越边界:Mistral 7B挑战AI新标准,全面超越Llama 2 13B
    引言在人工智能领域,模型的性能一直是衡量其价值和应用潜力的关键指标。近日,一个新的里程碑被设立:MistralAI发布了其最新模型Mistral7B,它在众多基准测试中全面超越了Llama213B模型,标志着AI技术的一个重大进步。Mistral7BvsLlama213BMistral7B的发布,不仅是一次技术上的突破......
  • 二分图的匹配
    定义有点扩展域并查集的意思~如果一张无向图的\(N\)个节点\((n\geq2)\)可以分成\(A,B\)两个非空集合,其中\(A\capB=\emptyset\),并且在同一集合内的点之间都没有边相连,那么称这张无向图为一张二分图。\(A\)、\(B\)分别称为二分图的左部和右部。性质如果两个集......
  • 麒麟系统一直free命令看内存占用90%但是top命令看每个程序占用内存只有20%,怎么查找什
    麒麟系统一直free命令看内存占用90%但是top命令看每个程序占用内存只有20%,怎么查找什么问题导致的这种情况 这种情况可能是因为Linux系统的内存管理机制导致的。free命令和top命令使用不同的方式来报告内存使用情况,因此可能会看到不同的结果。free命令显示的......