leetcode 2233. K 次增加后的最大乘积

leetcode 2233. K 次增加后的最大乘积,第1张


给你一个非负整数数组 nums 和一个整数 k 。

每次 *** 作,你可以选择 nums 中 任一 元素并将它 增加 1 。

请你返回 至多 k 次 *** 作后,能得到的 nums的 最大乘积 。

由于答案可能很大,请你将答案对 109 + 7 取余后返回。

示例 1:

输入:nums = [0,4], k = 5
输出:20
解释:将第一个数增加 5 次。

得到 nums = [5, 4] ,乘积为 5 * 4 = 20 。

可以证明 20 是能得到的最大乘积,所以我们返回 20 。

存在其他增加 nums 的方法,也能得到最大乘积。

示例 2:

输入:nums = [6,3,3,2], k = 2
输出:216
解释:将第二个数增加 1 次,将第四个数增加 1 次。

得到 nums = [6, 4, 3, 3] ,乘积为 6 * 4 * 3 * 3 = 216 。

可以证明 216 是能得到的最大乘积,所以我们返回 216 。

存在其他增加 nums 的方法,也能得到最大乘积。

提示:

  • 1 <= nums.length, k <= 105
  • 0 <= nums[i] <= 106

C++

class Solution {
public:
    int maximumProduct(vector& nums, int k) {
        priority_queue,greater> que;
        for(auto num:nums) {
            que.push(num);
        }
        while(k) {
            int num=que.top();
            que.pop();
            num++;
            que.push(num);
            k--;
        }
        long res=1;
        int mod=1000000007;
        while(!que.empty()) {
            res=((long)res*(long)que.top())%mod;
            que.pop();
        }
        return res;
    }
};

java

class Solution {
    public int maximumProduct(int[] nums, int k) {
        PriorityQueue que = new PriorityQueue<>();
        for (int num : nums) {
            que.add(num);
        }
        while (k > 0) {
            int num = que.poll();
            num++;
            que.add(num);
            k--;
        }
        long res = 1;
        int mod = 1000000007;
        while (!que.isEmpty()) {
            res = res * ((long) que.poll()) % mod;
        }
        return (int)res;
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/674859.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存