Leetcode 2233. Maximum Product After K Increments

该博客探讨了LeetCode第2233题,寻找在允许对数组元素增加K次的情况下,如何获得最大乘积。解法1利用最小堆实现,保证每次增加最小元素,从而最大化乘积。解法2通过统计各数字出现次数,每次减1直至0,然后递增下一最小数字,简化时间复杂度至O(n)。
摘要由CSDN通过智能技术生成

题目

在这里插入图片描述

解法1

首先理解一下题意,要求的是对数组中某些数字增加1后的最大乘积,一共可增加k次。对于每一次增加1,整个乘积的变化是除了被增加这个数字以外的数字总和。那么最后乘积最大也就是k次增加的最多。从贪心的思想来看,保证每次增加都是最大即可,而每次增加要最大,也就是被增加的数字是所有数字中最小的即可。
自然而然地想到用min heap来保证能够快速找到最小的数字
note:这道题目有个点很有意思,如果这个mod放在最后进行,那么会TLE,只有放在while循环内部才能过,理论上时间复杂度是一模一样的

class Solution {
   
public:
    int maximumProduct(vector<int>& nums, int k) {
   
        int tmp = pow(10,9) + 7;
        priority_queue<int,vector<</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值