2517. 礼盒的最大甜蜜度

题目链接:

最小化最大值 \(\longrightarrow\) 二分答案

找左性质的右边界,所以最后二分结束后返回的是 \(l-1。\)
猜一个答案 \(x\),两件商品价格相差 \(\geqslant x\) 表示差距的最小值维持在 \(x\),可以选择当前商品。统计选择的商品数量,若商品数量小于 \(k\),说明不满足甜蜜度的定义,返回 \(\rm false\)

class Solution {
public:
    int maximumTastiness(vector<int>& price, int k) {
        int n = price.size();
        sort(price.begin(), price.end());
        int l = 0, r = price[n - 1] - price[0] + 1;
        auto check = [&](int x) -> bool {
            int cnt = 1, pre = price[0];
            for (int i = 1; i < n; i++) {
                if ((price[i] - pre) >= x) {
                    pre = price[i];
                    cnt ++;
                }
            }
            return cnt < k;
        };
        while (l < r) {
            int mid = l + r >> 1;
            if (check(mid)) r = mid;
            else l = mid + 1;
        }
        return l - 1;
    }
};
posted @ 2024-07-20 16:33  胖柚の工作室  阅读(12)  评论(0)    收藏  举报