LeetCode 2171. 拿出最少数目的魔法豆

一、题目

1、题目描述

给定一个 正整数 数组 beans ,其中每个整数表示一个袋子里装的魔法豆的数目。

请你从每个袋子中 拿出 一些豆子(也可以 不拿出),使得剩下的 非空 袋子中(即 至少还有一颗 魔法豆的袋子)魔法豆的数目 相等。一旦把魔法豆从袋子中取出,你不能再将它放到任何袋子中。

请返回你需要拿出魔法豆的 最少数目

2、接口描述

class Solution {
public:
    long long minimumRemoval(vector<int>& beans) {
        
    }
};

3、原题链接

2171. 拿出最少数目的魔法豆


二、解题报告

1、思路分析

题意就是给你一个数组,你可以使每个元素减少任意值,问你最终使得剩下的元素都相等的最小代价。

那么我们知道了最终的状态是数组里面有k个相同的数字x。

那么x一定是原数组中的某个数字

否则,如果x比原数组任意元素大,那么无法通过减少元素的值来得到目标状态

如果x比原数组任意元素小,那么总能找到arr[i] > x,使得arr[i]比x更适合最终状态

所以我们把原数组升序排序,枚举每个元素作为最终状态的代价即可,获取代价的时间复杂度O(1),只要用总和减去最终状态就是代价

排序是O(nlogn),排序递归开销要O(logn)

2、复杂度

时间复杂度: O(nlogn) 空间复杂度:O(logn)

3、代码详解

class Solution {
public:
    long long minimumRemoval(vector<int>& beans) {
        sort(beans.begin() , beans.end());
        long long sum = accumulate(beans.begin() , beans.end() , 0LL),
        n = beans.size() , ret = sum;
        for(int i = 0 ; i < n ; i++)
            ret = min(ret , sum - (n - i) * beans[i]);
        return ret;
    }
};

相关推荐

  1. LeetCode 2171. 少数魔法

    2024-01-19 22:10:05       44 阅读
  2. LeetCode解法汇总2171. 少数魔法

    2024-01-19 22:10:05       32 阅读
  3. LeetCode 2171.少数魔法:排序 + 枚举

    2024-01-19 22:10:05       32 阅读
  4. 【力扣每日一题】力扣2171少数魔法

    2024-01-19 22:10:05       37 阅读
  5. 2024.1.18力扣每日一题——少数魔法

    2024-01-19 22:10:05       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-19 22:10:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-19 22:10:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-19 22:10:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-19 22:10:05       18 阅读

热门阅读

  1. 常见的 Linux 发行版和相应的服务管理命令

    2024-01-19 22:10:05       33 阅读
  2. UIElement编辑器扩展 组件 Inspector

    2024-01-19 22:10:05       36 阅读
  3. MySQL 8.0中已过时的选项和变量

    2024-01-19 22:10:05       21 阅读
  4. 鸿蒙使用第三方SO库

    2024-01-19 22:10:05       41 阅读