网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
L,
N, and
M
Lines 2…
N+1: Each line contains a single integer indicating how far some rock is away from the starting rock. No two rocks share the same position.
Output
Line 1: A single integer that is the maximum of the shortest distance a cow has to jump after removing
M rocks
Sample Input
25 5 2
2
14
11
21
17
Sample Output
4
Hint
Before removing any rocks, the shortest jump was a jump of 2 from 0 (the start) to 2. After removing the rocks at 2 and 14, the shortest required jump is a jump of 4 (from 17 to 21 or from 21 to 25).
其实这几篇二分的题目,思路都一样,都是二分+判断函数,这个题和牛棚那个题都差不多,只不过这里是要去掉某个 石头,然后,第一个和最后一个不能去掉,所以我们可以转换一下,我们可以判断剩下的石头数是否为n-m+1(n,m同题目定义),满足这个条件,说明二分传进来的值可行,我们继续像后寻找更大的,直到循环结束
#include<cstdio>
#include<algorithm>
using namespace std;
int l,n,m;
int a[50005];
int f(int mid){
int cou=0,sum=0;
for(int i=0;i<n;i++)
{
if(a[i]-sum<mid)//如果小于,就舍去当前的石头
continue;
sum=a[i];
cou++;
}
if(l-a[n-1]>=mid)//判断最后一个石头能不能留下来
cou++;
if(cou>=n-m+1)
return 1;
else
return 0;
}
int main (){
while(~scanf("%d%d%d",&l,&n,&m)){
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
int ll=0,r=l,ans;
while(ll<=r){
int m=(ll+r)/2;
if(f(m)) {ll=m+1;ans=m;}//满足条件,继续往后寻找.
else {
r=m-1;
}
}
printf("%d\n",ans);
}
}
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**