90分请教!
查看原帖
90分请教!
604006
CuteGhost楼主2023/8/8 01:30
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    static int n;
    static int m;
    static int[] arr = new int[(int) (1e5+10)];

    static int[] dis = new int[(int) (1e5+10)];
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        for (int i = 1; i <= n; i++) {
            arr[i] = sc.nextInt();
        }
        Arrays.sort(arr,1,n+1);
        solution();
    }

    private static void solution() {
        // 1 2 4 8 9 => 1 4 9 > 3
        //  1 2 4 1
        for(int i = 1; i < n; i++) {
            dis[i] = arr[i+1] - arr[i];
        }
        int disMin = 0;
        int disMax = 200000;
        while (disMax > disMin) {
            int mid = disMax + disMin + 1 >> 1;
            if(check(mid)) {
                disMin = mid;
            }else  {
                disMax = mid - 1;
            }
        }
        System.out.println(disMin);
    }

    private static boolean check(int mid) {
        int sum = 0,cnt = 1;
        for(int i = 1; i < n; i++) {
            sum += dis[i];
            if(sum >= mid) {
                cnt ++;
                sum = 0;
            }
        }
        return cnt >= m;
    }
}

实在不知道哪里错了!

2023/8/8 01:30
加载中...