题目链接:
最小化最大值 \(\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;
}
};
标签:pre,cnt,礼盒,int,甜蜜,mid,2517,price
From: https://www.cnblogs.com/pangyou3s/p/18313330