【力扣每日一题】力扣2171拿出最少数目的魔法豆

这篇具有很好参考价值的文章主要介绍了【力扣每日一题】力扣2171拿出最少数目的魔法豆。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目来源

力扣2171拿出最少数目的魔法豆

题目概述

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

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

请返回你需要拿出魔法豆的 最少数目文章来源地址https://www.toymoban.com/news/detail-809645.html

解题思路

  1. 剩余的豆子数量肯定是某一个袋中豆子的数量(如果不是的话,其他数量大于这个袋子的需要拿出更多, 这个袋子也需要拿出,结果肯定大于这个袋子不拿出的)。
  2. 遍历每一种剩余的可能求最小结果。

代码实现

java实现

public class Solution {

    public long minimumRemoval(int[] beans) {
        // 袋子数量
        int length = beans.length;
        // 对每个袋子里的豆子数排序
        Arrays.sort(beans);
        // 记录总兜子数
        long total = 0;
        for (int bean: beans) {
            total += bean;
        }
        // min记录移除数量
        // 默认移除全部的豆子
        long min = total;
        int lastRest = 0;
        for (int i = 0; i < length; i++) {
            if (beans[i] == lastRest) continue;
            // beans[i]为剩余数量, length - i 表示有多少袋子数量大于剩余数量
            // 剩余数量 * 大于剩余数量的袋子数就是最终剩余多少豆子
            // current表示需要移除的豆子数
            long current = total - (long) beans[i] * (length - i);
            min = Math.min(min, current);
            lastRest = beans[i];
        }
        return min;
    }
}

c++实现

class Solution {
public:
    long long minimumRemoval(vector<int>& beans) {
        // 袋子数量
        int length = beans.size();
        // 对每个袋子里的豆子数排序
        sort(beans.begin(), beans.end());
        // 记录总兜子数
        long long total = 0;
        for (int bean : beans) {
            total += bean;
        }
        // min记录移除数量
        // 默认移除全部的豆子
        long long min = total;
        int lastRest = 0;
        for (int i = 0; i < length; i++) {
            if (beans[i] == lastRest) continue;
            // beans[i]为剩余数量, length - i 表示有多少袋子数量大于剩余数量
            // 剩余数量 * 大于剩余数量的袋子数就是最终剩余多少豆子
            // current表示需要移除的豆子数
            long long current = total - (long long)beans[i] * (length - i);
            min = min < current ? min : current;
            lastRest = beans[i];
        }
        return min;
    }
};

到了这里,关于【力扣每日一题】力扣2171拿出最少数目的魔法豆的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【力扣每日一题】力扣2765最长交替子数组

    力扣2765最长交替子数组 给你一个下标从 0 开始的整数数组 nums 。如果 nums 中长度为 m 的子数组 s 满足以下条件,我们称它是一个 交替子数组 : m  大于  1  。  s1  =  s0  +  1  。 下标从  0  开始的子数组  s  与数组 [ s0 ,  s1 ,  s0 ,  s1 ,..., s(m-1) % 2 ] 一样。也就是说,

    2024年01月24日
    浏览(40)
  • 力扣每日一题90:子集

    给你一个整数数组  nums  ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 解集  不能  包含重复的子集。返回的解集中,子集可以按  任意顺序  排列。 示例 1: 示例 2: 提示: 1 = nums.length = 10 -10 = nums[i] = 10 通过次数 330.7K 提交次数 520.9K 通过率 63

    2024年02月06日
    浏览(21)
  • 力扣每日一题2023.7.13

    给我们一个矩阵,我们需要找出一条路径从矩阵第一层(索引为0)到达矩阵最后一层,并且使得路径上的数值之和最小. 如果是老手,那么应该一眼就能看出来可以使用动态规划,如果看不出来,那我们接下来一起分析分析. 首先我们先不要搞这么复杂,以示例1为例,我们就假设矩阵只有

    2024年02月15日
    浏览(31)
  • 2023-08-25力扣每日一题

    链接: 1448. 统计二叉树中好节点的数目 题意: 判断根节点到每个节点X的过程中,如果没有值大于X,则该节点为好节点,求好节点数量 解: 由于求根节点到其他节点的路径,则使用dfs算法,更新路径中的最大值即可 实际代码: 限制: 二叉树中节点数目范围是 [1, 10^5] 。

    2024年02月10日
    浏览(34)
  • 2023-08-16力扣每日一题

    链接: 2682. 找出转圈游戏输家 题意: 环形1到n,从1开始,每次 移动 第i次*k ,当移动到出现过的序号时停下, 求没移动到的数字 解: 简单模拟题,我也以为有数学做法,可恶 实际代码: 限制: 1 = k = n = 50

    2024年02月12日
    浏览(27)
  • 2023-08-23力扣每日一题

    链接: 1782. 统计点对的数目 题意: 给n个点和m条无向边(可重复),q个查询 定义 edge[a] 为一个点是a的边数量,定义 ret[a,b] 是 edge[a]+edge[b]-(a与b的边) q个查询q个答案,第i次查询值 val[i] ,求所有的 1=ab=n 条件下有多少 ret[a,b]val[i] 解: TLE卡47了 看了评论区用空间换时间,

    2024年02月10日
    浏览(27)
  • 2023-07-16力扣每日一题

    链接: 834. 树中距离之和 题意: 给定一个树,有n个节点,需要得到每个节点与其他节点的距离和 解: 还以为是弗洛伊德,一看范围3E4直接晕倒 想了四个小时,实在是想不出来了,看了一下评论里的转移公式 设 DP[i] 为节点 i 与其他节点的距离和, DP[F] 是节点 i 的父节点与

    2024年02月16日
    浏览(30)
  • 2023-09-08力扣每日一题

    链接: 2651. 计算列车到站时间 题意: 不看日期只看时间 解: ? 实际代码: 限制: 1 = arrivaltime 24 1 = delayedTime = 24

    2024年02月09日
    浏览(27)
  • 2023-08-09力扣每日一题

    链接: 1281. 整数的各位积和之差 题意: 十进制每一位的积减去每一位的和 解: 十进制位处理 实际代码: 限制: 1 = n = 10^5

    2024年02月13日
    浏览(30)
  • 2023-09-01力扣每日一题

    链接: 2240. 买钢笔和铅笔的方案数 题意: 一共total元,两种笔分别cost1和cost2元,求能买的的笔的所有情况,不要求花光钱 解: 枚举其中一个数字就行 实际代码: 限制: 1 = total, cost1, cost2 = 106

    2024年02月10日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包