当前位置: 首页 > news >正文

leetcode2171 拿出最少数目的魔法豆

题目

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

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

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

示例

输入: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 个魔法豆更少的方案。

解析

这道题目题意上还是不太好理解的,最后要的结果是数组中的每个数据,要么是0,不为0的都应该相等。最后要求的是取出最少的豆子数目,转化一下求剩余最多的豆子。
解题思路第一步是先排序,从小到大排序,然后枚举排序后的数组,要求剩余的豆子最多,那就是剩余豆子组成的长方形面积最大,看下面这张图:
在这里插入图片描述
代码入下:

func minimumRemoval(beans []int) int64 {slices.Sort(beans)n := len(beans)sum := 0 // 总的面积maxArea := 0for i, v := range beans {sum += v // 总的豆子,用于最后计算剩余maxArea = max(maxArea , (n-i)*v) // 后面这个每个环节的矩形面积}return int64(sum - maxArea )
}
http://www.lryc.cn/news/286036.html

相关文章:

  • 测试C#调用OpenCvSharp和ViewFaceCore从摄像头中识别人脸
  • 测试经理面试初体验
  • 使用ffmpeg调整视频中音频采样率及声道
  • 详细分析Java中的Date类以及格式转换
  • 【计算机网络】应用层——HTTP 协议(一)
  • 线程和进程的区别
  • proxy 代理的接口报错301问题
  • mysql进阶-执行计划
  • 【UE5】第一次尝试项目转插件(Plugin)的时候,无法编译
  • MeterSphere本地化部署实践
  • 巨变!如何理解中国发起的“数据要素X”计划?
  • CS8370错误,这是由于使用了C# 7.3中不支持的功能
  • Raspbian安装云台
  • 蓝桥杯理历年真题 —— 数学
  • 自然语言处理--双向匹配算法
  • IDEA 2023.3.2 安装教程
  • C语言常见面试题:什么是宏,宏的作用是什么?
  • 【0248】Background Writing实现机制分析
  • 基于springboot+vue的教师工作量管理系统(前后端分离)
  • 4-新建子模块(尝鲜)
  • 反序列化字符串逃逸(上篇)
  • [C++]使用yolov5的onnx模型结合onnxruntime和bytetrack实现目标追踪
  • i2c接口验证
  • 1、Pandas 数据结构:从 Series 到 DataFrame
  • MySQL函数—字符串函数
  • PLC从HTTP服务端获取JSON文件,解析数据到寄存器
  • LeetCode 46. 全排列
  • NVMe TCG安全数据存储简介
  • Linux命令-ab命令(Apache服务器的性能测试工具 )
  • 蓝桥杯java基础