算法设计与分析 2.4 白给题

★题目描述

给定N个自然数,你需要选择M个,使得M个数中两两之间的差的绝对值的最小值尽可能大,求这个最大值。

★输入格式

第一行两个空格隔开的正整数N,M,表示自然数个数和要选的数的个数。
接下来一行为N个空格隔开的给定自然数。

★输出格式

一个整数。

★样例输入

3 2
1 2 3

★样例输出

2

★参考代码

思路参考自共享文件

/*
先对数列进行排序
 
设置一个变量 间隔res 
设置这个 间隔res 从(max-min)/m开始减小到为1
一旦根据这个间隔可以在差值序列中找到对应的数列,那么就说明这个间隔为答案 

[0,max_res]间找间隔res应该使用二分 
否则会超时
*/

#include
using namespace std;

int n,m;
int a[200005];
int b[200005];

int fun(int res){
    int cnt=0, k=1;
    for(int i=1; i=m) return 1;
    }
    return 0;
}

int df(int L, int R){
    if(L>R) return 0;
    
    int mid = (L+R)/2;
    if(fun(mid)) 
        return max(df(mid+1, R), mid);
    else
        return df(L, mid-1);
}

int main(){
    scanf("%d%d",&n, &m);
    for(int i=0; i

你可能感兴趣的:(算法设计与分析 2.4 白给题)