返回介绍

solution / 2500-2599 / 2517.Maximum Tastiness of Candy Basket / README_EN

发布于 2024-06-17 01:03:04 字数 5441 浏览 0 评论 0 收藏 0

2517. Maximum Tastiness of Candy Basket

中文文档

Description

You are given an array of positive integers price where price[i] denotes the price of the ith candy and a positive integer k.

The store sells baskets of k distinct candies. The tastiness of a candy basket is the smallest absolute difference of the prices of any two candies in the basket.

Return _the maximum tastiness of a candy basket._

 

Example 1:

Input: price = [13,5,1,8,21,2], k = 3
Output: 8
Explanation: Choose the candies with the prices [13,5,21].
The tastiness of the candy basket is: min(|13 - 5|, |13 - 21|, |5 - 21|) = min(8, 8, 16) = 8.
It can be proven that 8 is the maximum tastiness that can be achieved.

Example 2:

Input: price = [1,3,1], k = 2
Output: 2
Explanation: Choose the candies with the prices [1,3].
The tastiness of the candy basket is: min(|1 - 3|) = min(2) = 2.
It can be proven that 2 is the maximum tastiness that can be achieved.

Example 3:

Input: price = [7,7,7,7], k = 2
Output: 0
Explanation: Choosing any two distinct candies from the candies we have will result in a tastiness of 0.

 

Constraints:

  • 2 <= k <= price.length <= 105
  • 1 <= price[i] <= 109

Solutions

Solution 1

class Solution:
  def maximumTastiness(self, price: List[int], k: int) -> int:
    def check(x: int) -> bool:
      cnt, pre = 0, -x
      for cur in price:
        if cur - pre >= x:
          pre = cur
          cnt += 1
      return cnt >= k

    price.sort()
    l, r = 0, price[-1] - price[0]
    while l < r:
      mid = (l + r + 1) >> 1
      if check(mid):
        l = mid
      else:
        r = mid - 1
    return l
class Solution {
  public int maximumTastiness(int[] price, int k) {
    Arrays.sort(price);
    int l = 0, r = price[price.length - 1] - price[0];
    while (l < r) {
      int mid = (l + r + 1) >> 1;
      if (check(price, k, mid)) {
        l = mid;
      } else {
        r = mid - 1;
      }
    }
    return l;
  }

  private boolean check(int[] price, int k, int x) {
    int cnt = 0, pre = -x;
    for (int cur : price) {
      if (cur - pre >= x) {
        pre = cur;
        ++cnt;
      }
    }
    return cnt >= k;
  }
}
class Solution {
public:
  int maximumTastiness(vector<int>& price, int k) {
    sort(price.begin(), price.end());
    int l = 0, r = price.back() - price[0];
    auto check = [&](int x) -> bool {
      int cnt = 0, pre = -x;
      for (int& cur : price) {
        if (cur - pre >= x) {
          pre = cur;
          ++cnt;
        }
      }
      return cnt >= k;
    };
    while (l < r) {
      int mid = (l + r + 1) >> 1;
      if (check(mid)) {
        l = mid;
      } else {
        r = mid - 1;
      }
    }
    return l;
  }
};
func maximumTastiness(price []int, k int) int {
  sort.Ints(price)
  return sort.Search(price[len(price)-1], func(x int) bool {
    cnt, pre := 0, -x
    for _, cur := range price {
      if cur-pre >= x {
        pre = cur
        cnt++
      }
    }
    return cnt < k
  }) - 1
}
function maximumTastiness(price: number[], k: number): number {
  price.sort((a, b) => a - b);
  let l = 0;
  let r = price[price.length - 1] - price[0];
  const check = (x: number): boolean => {
    let [cnt, pre] = [0, -x];
    for (const cur of price) {
      if (cur - pre >= x) {
        pre = cur;
        ++cnt;
      }
    }
    return cnt >= k;
  };
  while (l < r) {
    const mid = (l + r + 1) >> 1;
    if (check(mid)) {
      l = mid;
    } else {
      r = mid - 1;
    }
  }
  return l;
}
public class Solution {
  public int MaximumTastiness(int[] price, int k) {
    Array.Sort(price);
    int l = 0, r = price[price.Length - 1] - price[0];
    while (l < r) {
      int mid = (l + r + 1) >> 1;
      if (check(price, mid, k)) {
        l = mid;
      } else {
        r = mid - 1;
      }
    }
    return l;
  }

  private bool check(int[] price, int x, int k) {
    int cnt = 0, pre = -x;
    foreach (int cur in price) {
      if (cur - pre >= x) {
        ++cnt;
        pre = cur;
      }
    }
    return cnt >= k;
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文