​LeetCode解法汇总2171. 拿出最少数目的魔法豆

news2024/11/21 11:00:42

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


描述:

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

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

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

示例 1:

输入:beans = [4,1,6,5]
输出:4
解释:
- 我们从有 1 个魔法豆的袋子中拿出 1 颗魔法豆。
  剩下袋子中魔法豆的数目为:[4,0,6,5]
- 然后我们从有 6 个魔法豆的袋子中拿出 2 个魔法豆。
  剩下袋子中魔法豆的数目为:[4,0,4,5]
- 然后我们从有 5 个魔法豆的袋子中拿出 1 个魔法豆。
  剩下袋子中魔法豆的数目为:[4,0,4,4]
总共拿出了 1 + 2 + 1 = 4 个魔法豆,剩下非空袋子中魔法豆的数目相等。
没有比取出 4 个魔法豆更少的方案。

示例 2:

输入:beans = [2,10,3,2]
输出:7
解释:
- 我们从有 2 个魔法豆的其中一个袋子中拿出 2 个魔法豆。
  剩下袋子中魔法豆的数目为:[0,10,3,2]
- 然后我们从另一个有 2 个魔法豆的袋子中拿出 2 个魔法豆。
  剩下袋子中魔法豆的数目为:[0,10,3,0]
- 然后我们从有 3 个魔法豆的袋子中拿出 3 个魔法豆。
  剩下袋子中魔法豆的数目为:[0,10,0,0]
总共拿出了 2 + 2 + 3 = 7 个魔法豆,剩下非空袋子中魔法豆的数目相等。
没有比取出 7 个魔法豆更少的方案。

提示:

  • 1 <= beans.length <= 105
  • 1 <= beans[i] <= 105

解题思路:

beans的排序不影响最终结果,所以可以先按照大小对beans进行排序。

然后从左向右开始遍历,如果以i位置的魔法豆为基准,满足条件的话,要取出的魔法豆分为三部分:

i左侧的部分要全部取出;

i位置的魔法都无需操作;

i右侧的部分,要取出

i位置右侧的部分,

每个位置要取出的魔法豆分为三部分:

左侧的部分sumLeft,这部分要全部取出;

i位置及i右侧的部分为sumRight = sum-sumLeft-(length-left)*beans[i]。

则takeNum = sum - (length-left)*beans[i]。

遍历i,求takeNum的最大值即可。

代码:

class Solution {
public:
    long long minimumRemoval(vector<int> &beans)
    {
        long long abs = 100000L * 100000L;
        long long  sum = 0;
        sort(beans.begin(), beans.end());
        for (int num : beans)
        {
            sum += num;
        }
        for (int i = 0; i < beans.size(); i++)
        {
            long long takeNum = sum - (beans.size() - i) * beans[i];
            abs = min(takeNum, abs);
        }
        return abs;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1394489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线程进阶(以解决线程安全问题为主)、volatile的底层实现

线程&#xff1a;以解决线程安全问题为主 进程&#xff1a;运行时程序&#xff0c;操作系统分配内存资源的最小单位。 线程 &#xff1a;进程内部最小执行单元。 多线程的优点&#xff1a;提高程序响应速度&#xff0c;可以多个线程各自完成自己的工作&#xff0c;提高设备利…

深入理解MyBatis缓存机制:一级缓存与二级缓存详解

深入理解MyBatis缓存机制&#xff1a;一级缓存与二级缓存详解 MyBatis作为一款优秀的持久层框架&#xff0c;其缓存机制是其核心功能之一。在MyBatis中&#xff0c;我们通常会遇到一级缓存和二级缓存&#xff0c;它们分别在不同的场景中发挥着重要作用。本文将深入探讨一级缓存…

鸿蒙不兼容安卓!正式迈入“完全自主研发”阶段,余承东最新发声!

2019年8月9日&#xff0c;华为鸿蒙“备胎”的一夜转正&#xff0c;四年多后的今天&#xff08;1月18日&#xff09;&#xff0c;华为鸿蒙再度令各界惊喜&#xff0c;因为在这一天&#xff0c;华为正式推出了完全自主研发的鸿蒙版本&#xff1a;HarmonyOS NEXT鸿蒙星河版&#x…

IMX6LL|时钟控制

一.时钟控制模块 4个层次配置芯片时钟 晶振时钟PLL与PFD时钟PLL选择时钟根时钟/外设时钟 1.1晶振时钟 系统时钟来源 RTC时钟源&#xff1a;32.768KHz&#xff0c;连接RTC模块&#xff0c;进行时间计算。系统时钟&#xff1a;24MHz&#xff0c;芯片主晶振 1.2PLL和PFD倍频时钟…

MySQL进阶45讲【2】日志系统:一条SQL更新语句是如何执行的?

1 前言 上篇文章我们系统了解了一个查询语句的执行流程&#xff0c;并介绍了执行过程中涉及的处理模块。相信大家还记得&#xff0c;一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块&#xff0c;最后到达存储引擎。 那么&#xff0c;一条更新语句…

【Nuxt3】目录中components文件夹的用法

简言 在Nuxt3中&#xff0c;components文件夹和vue文件夹用处一样&#xff0c;都是放置vue公共组件的地方。只不过由于Nuxt3中components文件内的组件自动导入机制&#xff0c;用法些许不同。 components components/ 目录是你放置所有 Vue 组件的地方。 Nuxt 会自动导入该目…

刷题 ------ 双指针

文章目录 1.验证回文串 ||2.计数二进制字串3. 字符的最短距离4.按奇偶排序数组5.仅仅反转字母6. 奇偶排序数组 ||7.长按键入8. 递减字符匹配9.有序数组的平方10.复写零11.删除回文子序列12.检查单词是否为剧中其他单词的前缀13.交替合并的字符串14.反转单词前缀15.找出数组中的…

阿赵UE学习笔记——11、地形系统

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的用法&#xff0c;这次来学习一下虚幻引擎的地形系统的用法。 一、创建地形 在选项模式里面&#xff0c;选择地形&#xff1a; 进入到地形界面之后&#xff0c;需要先创建一个地形&#xff1a; 留意看…

npm依赖库备份

常用命令 设置默认使用本地缓存安装Nodejs时会自动安装npm&#xff0c;但是局路径是C:\Users\Caffrey\AppData\Roaming\npm默认的缓存路径是C:\Users\Caffrey\AppData\Roaming\npm-cache&#xff1b;查看npm的prefix和cache路径配置信息设置路径 设置默认使用本地缓存 npm con…

李沐《动手学深度学习》线性神经网络 softmax回归

系列文章 李沐《动手学深度学习》预备知识 张量操作及数据处理 李沐《动手学深度学习》预备知识 线性代数及微积分 李沐《动手学深度学习》线性神经网络 线性回归 目录 系列文章一、softmax回归&#xff08;一&#xff09;问题背景&#xff08;二&#xff09;网络架构&#xf…

路飞项目--02

补充&#xff1a;axios封装 # 普通使用&#xff1a;安装 &#xff0c;导入使用 const filmListreactive({result:[]}) axios.get().then() async function load(){let responseawait axios.get()filmList.resultresponse.data.results } # 封装示例&#xff1a;请求发出去之前…

【计算机组成与体系结构Ⅱ】虚拟存储器以及虚拟变换(实验)

实验7&#xff1a;虚拟存储器以及虚拟变换 一、实验目的 1&#xff1a;加深对虚拟存储器基本概念、基本组织结构以及基本工作原理的理解。 2&#xff1a;掌握页式、段式&#xff0c;段页式存储的原理以及地址变换的方法。 3&#xff1a;理解LRU与随机替换的基本思想。 二、…

easy Exsel导出

目录 一、首先引入依赖 二、然后封装一个VO 三、Controller层 四、Service实现类 引用样式 自适应列宽 自适应行高 五、测试 postman ​编辑 浏览器 异常 分配到这个任务了&#xff0c;写个小demo记录下&#xff0c;具体可参考EasyExcel官方文档 我用的是web上传…

redis数据安全(五)事务

一、概念&#xff1a; 1、介绍&#xff1a;Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令&#xff0c;一个事务中所有命令都会被序列化。在事务执行过程&#xff0c;会按照顺序串行化执行队列中的命令&#xff0c;其他客户端提交的命令请求不会插入到事务执行命…

css实现动态水波纹效果

效果如下&#xff1a; 外层容器 (shop_wrap)&#xff1a; 设置外边距 (padding) 提供一些间距和边距 圆形容器 (TheCircle)&#xff1a; 使用相对定位 (position: relative)&#xff0c;宽度和高度均为 180px&#xff0c;形成一个圆形按钮圆角半径 (border-radius) 设置为 50%&…

Linux编译器--gcc和g++使用

gcc和g使用 一、gcc/g的作用1.1 预处理1.2 编译1.3 汇编1.4 链接 二、静态库和动态库三、make/Makefile3.1 make/Makefile3.2 依赖关系和依赖方法3.3 多文件编译3.4 make原理3.5 项目清理 四、linux下的第一个小程序-进度条4.1 行缓冲区的概念4.2 \r和\n4.3 进度条代码 一、gcc…

rt-thread修改全局中断屏蔽函数,解决内核频繁关闭中断影响精密计时问题

带rtt-nano实时操作系统的小板子需要读取单总线设备&#xff0c;使用软件延时吧&#xff0c;总是由于时隙不精确&#xff0c;通信不稳定。按说不稳定情况也不频繁&#xff0c;但考虑到未来需要对上百、上千米外的单总线设备通信&#xff0c;开发的时候偷个懒&#xff0c;到应用…

Jmeter后置处理器——JSON提取器

目录 1、简介 2、使用步骤 1&#xff09;添加线程组 2&#xff09;添加http请求 3&#xff09; 添加JSON提取器 1、简介 JSON是一种简单的数据交换格式&#xff0c;允许互联网应用程序快速传输数据。JSON提取器可以从JSON格式响应数据中提取数据、简化从JSON原始数据中提取特定…

《Unix环境高级编程》第三版源代码编译报错汇总(WSL)

文章目录 Error: unable to disambiguate: -dylib (did you mean --dylib ?)undefined reference to majorerror: ‘FILE’ has no member named ‘__pad’; did you mean ‘__pad5’?error: ‘FILE’ has no member named ‘_flag’; did you mean ‘_flags’?error: ‘FIL…

AAAI 2024 | TEx-Face,5秒内按需生成照片级3D人脸

本文介绍一篇来自浙江大学ReLER实验室的工作&#xff0c;"Controllable 3D Face Generation with Conditional Style Code Diffusion"&#xff0c;目前该文已被AAAI 2024录用。 论文题目&#xff1a; Controllable 3D Face Generation with Conditional Style Code D…