首页 > 分享 > 二分查找中的边界问题:+1,

二分查找中的边界问题:+1,

最新推荐文章于 2025-02-09 18:04:06 发布

学无止境丶 于 2017-03-20 16:22:32 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

题目描述

统计一个数字在排序数组中出现的次数。

分析:

原来一直对二分法很模糊,对mid+1,还是mid,决定这两个差不多,今天自己打脸了,控制的不精准就是错误。

把边界确定更加准确点,[left,end]确定为闭区间,只要不在这个区间,就+1或者-1不要模糊,不要模糊两可

class Solution {

public:

int GetNumberOfK(vector<int> data ,int k) {

int right=data.size()-1;

if (getLastk(data,k,0,right)==-1) return 0;

return getLastk(data,k,0,right)-getFirstk(data,k,0,right)+1;

}

int getFirstk(vector<int>&data,int k,int left,int right){

while(left<=right){

int mid=(left+right)>>1;

if(data[mid]<k)

left=mid+1;

else if(data[mid]>k)

right=mid-1;

else if(mid-1>=0&&data[mid-1]==k)

right=mid-1;

else

return mid;

}

return -1;

}

int getLastk(vector<int>&data,int k,int left,int right){

while(left<=right){

int mid=(left+right)>>1;

if(data[mid]<k)

left=mid+1;

else if(data[mid]>k)

right=mid-1;

else if(mid+1<data.size()&&data[mid+1]==k)

left=mid+1;

else

return mid;

}

return -1;

}

};

相关知识

二分查找模板
2251. 花期内花的数目(cpp内置二分查找)
二分答案
二分答案——木材加工(洛谷 P2440)
中印就边界问题取得6点共识,释放何种信号?
查找和替换字符类中的花括号
【二分】求方程的根
五年级信息技术下册 第9课 查找资料 1教案 闽教版
哈希表查找
在C#中跨多个列表查找公共项的最快方法

网址: 二分查找中的边界问题:+1, https://m.huajiangbk.com/newsview1947167.html

所属分类:花卉
上一篇: ISG型混合动力汽车模糊控制策略
下一篇: 卷积步长strides参数的具体