题目来源:码蹄集
题目描述:
**B站老师讲解链接:https://www.bilibili.com/video/BV1ex4y1P7HJ/?t=635.5&vd_source=3ae2a916df1bc5c1114c2bf3e95a2118**
C++代码实现:
参考链接:https://blog.51cto.com/u_15745546/5950627
#include<bits/stdc++.h>
using namespace std;
int n,c,a[100005],l,m,r;
bool check(int m){
int cnt=0;
int d;
int last=a[1];
for(int i=2;i<=n;i++){
d=a[i]-last;
if(d>=m){
cnt++;
last=a[i];
}
}
if(cnt+1<c) return true;
else return false;
}
int main( )
{
cin>>n>>c;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
l=1;
r=a[n]-a[1];
while(l<=r){
m=(r+l)/2;
if(check(m)) r=m-1;
else l=m+1;
}
cout<<r<<endl;
return 0;
}
C++提交测试结果:
Java代码实现:
import java.util.*;
public class Main {
public static boolean check(int[] a, int n, int m, int c) {
int cnt = 0;
int last = a[0];
for (int i = 1; i < n; i++) {
int d = a[i] - last;
if (d >= m) {
cnt++;
last = a[i];
}
}
if (cnt + 1 < c) return true;
else return false;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int c = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
Arrays.sort(a);
int l = 1, r = a[n - 1] - a[0];
while (l <= r) {
int m = (r + l) / 2;
if (check(a, n, m, c)) r = m - 1;
else l = m + 1;
}
System.out.println(r);
}
}