LeetCode 1775. 通过最少操作次数使数组的和相等(贪心+双指针)
文章目录
- 1. 题目
- 2. 解题
1. 题目
给你两个长度可能不等的整数数组 nums1 和 nums2 。
两个数组中的所有值都在 1 到 6 之间(包含 1 和 6)。
每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 之间 任意 的值(包含 1 和 6)。
请你返回使 nums1 中所有数的和与 nums2 中所有数的和相等的最少操作次数。
如果无法使两个数组的和相等,请返回 -1 。
示例 1:
输入:nums1 = [1,2,3,4,5,6], nums2 = [1,1,2,2,2,2]
输出:3
解释:你可以通过 3 次操作使 nums1 中所有数的和与 nums2 中所有数的和相等。
以下数组下标都从 0 开始。
- 将 nums2[0] 变为 6 。 nums1 = [1,2,3,4,5,6], nums2 = [6,1,2,2,2,2] 。
- 将 nums1[5] 变为 1 。 nums1 = [1,2,3,4,5,1], nums2 = [6,1,2,2,2,2] 。
- 将 nums1[2] 变为 2 。 nums1 = [1,2,2,4,5,1], nums2 = [6,1,2,2,2,2] 。示例 2:
输入:nums1 = [1,1,1,1,1,1,1], nums2 = [6]
输出:-1
解释:没有办法减少 nums1 的和或者增加 nums2 的和使二者相等。示例 3:
输入:nums1 = [6,6], nums2 = [1]
输出:3
解释:你可以通过 3 次操作使 nums1 中所有数的和与 nums2 中所有数的和相等。
以下数组下标都从 0 开始。
- 将 nums1[0] 变为 2 。 nums1 = [2,6], nums2 = [1] 。
- 将 nums1[1] 变为 2 。 nums1 = [2,2], nums2 = [1] 。
- 将 nums2[0] 变为 4 。 nums1 = [2,2], nums2 = [4] 。提示:
1 <= nums1.length, nums2.length <= 10^5
1 <= nums1[i], nums2[i] <= 6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/equal-sum-arrays-with-minimum-number-of-operations
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 排序,优先使用 sum 大的数组 能降低的最多的,或者 sum 小的数组能升高最多的
class Solution {public:int minOperations(vector<int>& nums1, vector<int>& nums2) {int len1 = nums1.size(), len2 = nums2.size();if(len1 > 6*len2 || len2 > 6*len1) return -1;sort(nums1.begin(), nums1.end());sort(nums2.begin(), nums2.end());int s1 = accumulate(nums1.begin(), nums1.end(),0);int s2 = accumulate(nums2.begin(), nums2.end(),0);if(s1 > s2){swap(nums1, nums2);swap(s1, s2);swap(len1, len2);}// 令 s1 <= s2int ans = 0, i = 0, j = len2-1;int delta1, delta2;while(s1 < s2 && (i < len1 || j >= 0)){delta1 = i < len1 ? 6-nums1[i] : 0;delta2 = j >= 0 ? nums2[j]-1 : 0;if(i < len1 && delta1 >= delta2){s1 += delta1;i++;ans++;}else if(j >= 0 && delta2 >= delta1){s2 -= delta2;j--;ans++;}}return ans;}
};
144 ms 111 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 1775. 通过最少操作次数使数组的和相等(贪心+双指针)相关推荐
- 力扣(leetcode)[453. 最小操作次数使数组元素相等]我见识到了,算法的终极是数学
> Problem: [453. 最小操作次数使数组元素相等 [TOC] # 思路 > 是我做算法做多了,我变菜了,世界的终极就是数学! # 解题方法 > 题目明确的说了,有n个数, ...
- 【LeetCode】453. 最小操作次数使数组元素相等
题目链接:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements/ 题目描述 给定一个长度为 n 的 非空 整数数 ...
- 【LeetCode】462. 最少移动次数使数组元素相等 II
一.题目描述 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 二.例如 例如: 输入: [1,2,3] ...
- LeetCode简单题之最小操作次数使数组元素相等
题目 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素相等的最小操作次数. 示例 1: 输入:nums = [1,2,3] 输出:3 解释: 只需要3次 ...
- 一道题,最小操作次数使数组元素相等引发的思考
前言 最近在打卡力扣刷题,一道简单题但是感觉挺好的. 力扣453:最小操作数使数组相等. 题目描述为: 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素 ...
- 453. 最小操作次数使数组元素相等
给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素相等的最小操作次数. class Solution {public int minMoves(int[] ...
- leetcode453. 最小操作次数使数组元素相等(贼难的简单题)
给定一个长度为 n 的 非空 整数数组,每次操作将会使 n - 1 个元素增加 1.找出让数组所有元素相等的最小操作次数. 示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次操作(注意每次 ...
- 力扣453.最小操作次数使数组元素相等
题目描述 给定一个长度为 n 的 非空 整数数组,每次操作将会使 n - 1 个元素增加 1.找出让数组所有元素相等的最小操作次数. 示例 输入: [1,2,3] 输出: 3 解释 只需要3次操作(注 ...
- LeetCode 462. 最少移动次数使数组元素相等 II(数学)
1. 题目 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输入: [1,2,3] 输出: 2 ...
最新文章
- 2021腾讯数字生态大会:腾讯安全聚焦安全共建,护航数字经济发展
- 女朋友求爱c语言程序,[转载]一个程序员写的求爱程序
- 聊下并发和Tomcat线程数(Updated)
- python32位安装
- ajax请求失败后重连和promiseIfy
- 自定义控件:视差特效
- mysql 备份配置文件_mySQL配置文件、备份与恢复
- Python | threading01 - 创建两个同时运行的子线程
- AptanaStudio3+PHP程序远程调试的方法和步骤
- PostgreSQL 获评2017 DB-Engines年度DBMS榜首
- JavaScript 函数replace揭秘
- linux 无线 扫描不到网络,在Ubuntu笔记本上搜不到无线信号的解决办法
- hdu 1800 字符串水题 可用字符串hash 字典树做 我用了最水的排序水过
- 学校计算机课怎取消红蜘蛛,谁知道怎么退出或卸载“红蜘蛛教学系统” 各位高手帮帮忙啊。。。(我们老师一讲就是一节课)...
- iTextSharp生成pdf文档案例
- 外圣内王适用于互联网行业吗?
- 通软终端安全管理系统V6 卸载脚本
- CodeForces - 3B Lorry【贪心】
- linux mint 搜狗 乱码,解决linux mint wine微信字体显示问题
- stm32wb55 flash
热门文章
- react接收后端文件_React获取Java后台文件流并下载Excel文件流程解析
- shell if多个条件判断_萌新关于Excel VBA中IF条件判断语句的一点心得体会
- 万能无线鼠标对码软件_400元就能买ROG无线游戏鼠标,ROG影刃2无线版使用体验...
- vue 鼠标点击事件_VBA代码解决方案第115讲:点击鼠标实现精准控制触发事件的VBA代码第二方案...
- 301缓存重定向?301 Moved Permanently (from disk cache)
- libSVM介绍(二)
- linux上安装fio教程,fio工具安装及使用
- java join 异常_Java:守护进程:thread.join()没有完成,当在一个线程中抛出异常时...
- python 建筑计算_制图小技巧:巧用Python和ELK瞬间完成总图建筑名称标注
- Kotlin 的 Array 转 List