二分的一些收获

阅读: 评论:0

二分的一些收获

二分的一些收获

  • 二分搜索函数:
#include<iostream>
using namespace std;
#include<algorithm>
int rfind(int a[],int mm,int num)
{int l=0,r=num-1;while(l<=r){int m=l+(r-l)/2;if(a[m]==mm)return m;else if(a[m]>mm){r=m-1;}elsel=m+1;}return -1;
}
int main()
{int num;cin>>num;int a[num];for(int i=0;i<num;++i)cin>>a[i];sort(a,a+num);int rsearch;cin>>rsearch;cout<<rfind(a,rsearch,num);
}
  • 心得:我们在if else的时候选择了左边更新为中间值+1,右边为相应的中间值-1,是为了能够跳出while循环。

  • 写一个函数LowerBound,在包含size个元素的、从小到大排序的int数组a里查找比给定整数p小的,下标最大的元素。找到则返回其下标,找不到则返回-1
#include<iostream>
using namespace std;
#include<algorithm>
int rfind(int a[],int mm,int num)
{int l=0,r=num-1;int las=-1;while(l<=r){int m=l+(r-l)/2;if(a[m]>=mm){r=m-1;}else if(a[m]<mm){l=m+1;las=m;}}return las;
}
int main()
{int num;cin>>num;int a[num];for(int i=0;i<num;++i)cin>>a[i];sort(a,a+num);int rsearch;cin>>rsearch;cout<<rfind(a,rsearch,num);
}
  • 心得:(1)如果中间的数>=搜索的数那么更新r;否则更新l和las;

本文发布于:2024-01-29 15:33:07,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170651359116272.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23