文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个整数数组 nums ,你的目标是 nums 中的所有元素相等。完成一次减少操作需要遵照下面的几个步骤:

  • 找出 nums 中的 最大 值。记这个值为 largest 并取其下标 i (下标从 0 开始计数)。如果有多个元素都是最大值,则取最小的 i 。
  • 找出 nums 中的 下一个最大 值,这个值 严格小于 largest ,记为 nextLargest 。
  • 将 nums[i] 减少 nextLargest 。

返回使 nums 中的所有元素相等的操作次数

示例 1:
输入:nums = [5,1,3]
输出:3
解释:需要 3 次操作使 nums 中的所有元素相等:
1. largest = 5 下标为 0 。nextLargest = 3 。将 nums[0] 减少到 3 。nums = [3,1,3] 。
2. largest = 3 下标为 0 。nextLargest = 1 。将 nums[0] 减少到 1 。nums = [1,1,3] 。
3. largest = 3 下标为 2 。nextLargest = 1 。将 nums[2] 减少到 1 。nums = [1,1,1] 。示例 2:
输入:nums = [1,1,1]
输出:0
解释:nums 中的所有元素已经是相等的。示例 3:
输入:nums = [1,1,2,2,3]
输出:4
解释:需要 4 次操作使 nums 中的所有元素相等:
1. largest = 3 下标为 4 。nextLargest = 2 。将 nums[4] 减少到 2 。nums = [1,1,2,2,2] 。
2. largest = 2 下标为 2 。nextLargest = 1 。将 nums[2] 减少到 1 。nums = [1,1,1,2,2] 。
3. largest = 2 下标为 3 。nextLargest = 1 。将 nums[3] 减少到 1 。nums = [1,1,1,1,2] 。
4. largest = 2 下标为 4 。nextLargest = 1 。将 nums[4] 减少到 1 。nums = [1,1,1,1,1] 。提示:1 <= nums.length <= 5 * 10^41 <= nums[i] <= 5 * 10^4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reduction-operations-to-make-the-array-elements-equal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 使用 map 计数
  • 找到末尾最大的两个数字,将最大的数字转为次大的数字即可,然后删除最大的,循环直到map只有一个数字
class Solution {public:int reductionOperations(vector<int>& nums) {map<int, int> m;for(auto n : nums)m[n]++;int ans = 0;while(m.size() > 1){auto it = m.end();it--;int x = it->first; // 最大的数字int ct = it->second; // 其个数it--;int y = it->first; // 次大的数字m[y] += ct; // x - > yans += ct; // 操作次数m.erase(x); // 删除 x}return ans;}
};

548 ms 121.2 MB C++

  • 直接排序,检查相同的数字的个数,到下一个不一样的数字时累加到答案中
class Solution {public:int reductionOperations(vector<int>& nums) {sort(nums.begin(), nums.end());int ans = 0, ct = 0, n = nums.back();for(int i = nums.size()-1; i >= 0; --i){   if(nums[i] != n){ans += ct;n = nums[i];}ct++;}return ans;}
};

208 ms 80.9 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1887. 使数组元素相等的减少操作次数(map)相关推荐

  1. LeetCode 2208. 将数组和减半的最少操作次数(优先队列)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个正整数数组 nums .每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半.(注意,在后续操作中你可以对减半过的数继续 ...

  2. LeetCode简单题之最小操作次数使数组元素相等

    题目 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素相等的最小操作次数. 示例 1: 输入:nums = [1,2,3] 输出:3 解释: 只需要3次 ...

  3. 【LeetCode】453. 最小操作次数使数组元素相等

    题目链接:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements/ 题目描述 给定一个长度为 n 的 非空 整数数 ...

  4. 力扣(leetcode)[453. 最小操作次数使数组元素相等]我见识到了,算法的终极是数学

    > Problem: [453. 最小操作次数使数组元素相等 [TOC] # 思路 > 是我做算法做多了,我变菜了,世界的终极就是数学! # 解题方法 > 题目明确的说了,有n个数, ...

  5. 一道题,最小操作次数使数组元素相等引发的思考

    前言 最近在打卡力扣刷题,一道简单题但是感觉挺好的. 力扣453:最小操作数使数组相等. 题目描述为: 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素 ...

  6. 453. 最小操作次数使数组元素相等

    给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素相等的最小操作次数. class Solution {public int minMoves(int[] ...

  7. leetcode453. 最小操作次数使数组元素相等(贼难的简单题)

    给定一个长度为 n 的 非空 整数数组,每次操作将会使 n - 1 个元素增加 1.找出让数组所有元素相等的最小操作次数. 示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次操作(注意每次 ...

  8. 力扣453.最小操作次数使数组元素相等

    题目描述 给定一个长度为 n 的 非空 整数数组,每次操作将会使 n - 1 个元素增加 1.找出让数组所有元素相等的最小操作次数. 示例 输入: [1,2,3] 输出: 3 解释 只需要3次操作(注 ...

  9. 453. 最小移动次数使数组元素相等

    453. 最小移动次数使数组元素相等 给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3]输出: 3解 ...

最新文章

  1. Excel导入SQL数据库完整代码
  2. 【FPGA】FIFO的Verilog设计之同步FIFO的设计
  3. Android开发究竟该如何学习,成功入职字节跳动
  4. 【吉林】2021年下半年软考报考时间及通知
  5. 【CSS3 DEMO】扑克正反面翻牌效果
  6. 思杰VDI十终极结构图及总结
  7. 疯传社群源码v7.8.0 测试可用 修复绿色版
  8. python---之os.path.split()函数
  9. 系统提示 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。
  10. Hadoop原理之——HDFS原理
  11. 无线网络何连不到服务器,关于电脑宾馆连接不上无线网络的解决方法
  12. c语言中波浪线scanf,~scanf 波浪线
  13. bio linux 创建_[转载]biolinux包含软件
  14. Linux Apache服务详解——Apache服务基础知识
  15. php 邮箱反垃圾机制,避开反垃圾邮件机制的qq邮件群发技巧
  16. email英文计算机求职信,求职信范文_计算机英文求职信范文
  17. Android 获取手机号码
  18. 【HUSTOJ】1022: 输出小写字母表
  19. Android WiFi Direct文件传输
  20. 平面视觉(二):一键还原父母儿时的记忆

热门文章

  1. Flask-DebugToolbar的配置
  2. 两种解除禁止右键、选中、复制的方法
  3. python2.7无法使用pip(安装easy_install)
  4. JS_17 ES5,ES6
  5. linux libbz2.so.1,libbz2.so.1.0 = not found 试过了链接和设置环境变量
  6. android关机分区卸载,Android关机重启流程(二)
  7. uboot将命令结构体单独存放在某个代码段的方法
  8. Linux下WPS自主设置快捷键,电脑wps的word怎么自主设定快捷键
  9. 使用jQuery异步传递含复杂属性及集合属性的Model到控制器方法
  10. MyBatis 逆向工程(MyBatis 自动生成接口以及xml)的使用