【1775. 通过最少操作次数使数组的和相等】

news2025/1/13 15:32:54

来源:力扣(LeetCode)

描述:

给你两个长度可能不等的整数数组 nums1nums2 。两个数组中的所有值都在 16 之间(包含 16)。

每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 16 之间 任意 的值(包含 16)。

请你返回使 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 <= 105
  • 1 <= nums1[i], nums2[i] <= 6

方法:贪心 + 哈希表

思路与算法

  题目给出长度分别为 n 和 m 的两个数组 nums1 和 nums2 ,两个数组中所有值都在 1 到 6 之间(包含 1 和 6),我们每次操作都可以选择任意数组中的任意一个整数将它变成 1 到 6 之间的任意的值(包含 1 和 6)。现在我们需要求使 nums1 中所有数之和与 nums2 中所有数之和相等的最少操作次数。

  首先我们设 nums1 的和为 sum1 ,nums2 的和为 sum2 ,为了不失一般性,不妨设 sum1 > sum2 ,并设 diff = sum1−sum2 。现在我们需要修改最少的 nums1 和 nums2 中的数字来使 diff 变为 0。又因为对于数组中的数的每次修改对于 diff 的影响是相互独立的,我们对 nums1 和 nums2 中的数单独来进行分析——对于 nums1 中的某一个数 x,为了使 diff 更快的变小,将 x 变成 max⁡{1, x − diff} 对于 x 来说一定是最优的选择,此时能贡献的 diff 减小量为 x − max⁡{1, x − diff} 。同理对于 nums2 中的某一个数 y,将 y 变成 min⁡{6,y+diff} 对于 y 来说一定是最优的选择,此时能贡献的 diff 减小量为 6 − min⁡{6, y + diff} 。由于每一个数能贡献 diff 的减少量是独立的,所以我们对于 nums1 和 nums2 中的每一个数从对 diff 的减少量从大到小来进行操作使 diff 减少到 0 即可。为了避免每一次只减一个数的贡献值,我们可以对于每一个数的 diff 的贡献值用「哈希表」来进行存储,然后对于贡献值从大到小来快速减少 diff。

代码:

class Solution {
public:
    int help(vector<int>& h1, vector<int>& h2, int diff) {
        vector<int> h(7, 0);
        for (int i = 1; i < 7; ++i) {
            h[6 - i] += h1[i];
            h[i - 1] += h2[i];
        }
        int res = 0;
        for (int i = 5; i && diff > 0; --i) {
            int t = min((diff + i - 1) / i, h[i]);
            res += t;
            diff -= t * i;
        }
        return res;
    }

    int minOperations(vector<int>& nums1, vector<int>& nums2) {
        int n = nums1.size(), m = nums2.size();
        if (6 * n < m || 6 * m < n) {
            return -1;
        }
        vector<int> cnt1(7, 0), cnt2(7, 0);
        int diff = 0;
        for (auto& i : nums1) {
            ++cnt1[i];
            diff += i;
        }
        for (auto& i : nums2) {
            ++cnt2[i];
            diff -= i;
        }
        if (!diff) {
            return 0;
        }
        if (diff > 0) {
            return help(cnt2, cnt1, diff);
        }
        return help(cnt1, cnt2, -diff);
    }
};

1

复杂度分析
时间复杂度: O(n+m),其中 n,m 分别为数组 nums1 ,nums2 的长度。
空间复杂度: O©,其中 C 为数组 nums1 ,nums2 中元素值的取值空间,主要为用数组来模拟「哈希表」的空间开销。
author:力扣官方题解

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

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

相关文章

1978-2021年全国GDP平减指数计算模板

全国GDP平减指数计算公式可以给定基期&#xff0c;自动计算平减指数&#xff01; 1、时间区间&#xff1a;1978-2021年 2、计算说明&#xff1a;GDP平减指数名义GDP/实际GDP 实际GDP又称不变价GDP&#xff0c;名义GDP就是公布的数字&#xff0c;它没有考虑通货膨胀因素。 给…

【Unity】UnityWebRequest学习——Unity中的HTTP网络通信

目录UnityWebRequest 简介HTTP网络通信流程HTTP 三点注意事项HTTP请求HTTP响应例子使用Unity内置的UnityWebRequest类进行HTTP请求&#xff08;GET&#xff09;使用BestHTTP插件进行HTTP请求&#xff08;GET&#xff09;使用Unity内置的UnityWebRequest类进行HTTP请求&#xff…

主成分分析/因子分析与线性映射

数据降维&#xff0c;包括主成分分析PCA和因子分析FA&#xff0c;都离不开特征值和特征向量。今天先不细说特征值和特征向量&#xff0c;先说一说理解数据降维的一个关键概念&#xff0c;线性映射。 看到csdn里很多文章讲特征值与特征向量时&#xff0c;都会先讲讲线性映射&am…

绿色荧光试剂Fluorescein Tyramide,荧光素酪胺,210236-90-1

CAS编号为210236-90-1的化学试剂其英文名为Fluorescein Tyramide&#xff0c;其中文名称为荧光素酪胺&#xff0c;它是一种绿色荧光染料。 该荧光试剂的分子量是495.49 &#xff0c;分子式为C29H21NO7。该试剂质量控制为95%&#xff0c;试剂的储存条件为&#xff1a; -20℃长期…

维二糖-聚乙二醇-酰基,Cellobiose-PEG-Hydrazide,酰基-PEG-纤维二糖

维二糖-聚乙二醇-酰基&#xff0c;Cellobiose-PEG-Hydrazide&#xff0c;酰基-PEG-纤维二糖 中文名称&#xff1a;纤维二糖-酰基 英文名称&#xff1a;Cellobiose-Hydrazide 别称&#xff1a;生物素修饰纤维二糖&#xff0c;生物素-纤维二糖 酰基(acyl group)&#xff0c;是…

[附源码]计算机毕业设计框架的资产管理系统设计与实现Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Linux学习笔记——初识Linux

01、初识Linux 1.1、操作系统概述 1、学习目标&#xff1a; 了解操作系统的作用了解常见的操作系统 2、硬件和软件 我们所熟知的计算机是由硬件和软件组成的。 硬件&#xff1a;计算机系统中由电子、机械和光电元件等组成的各种物理装置的总称。&#xff08;看的见、摸得…

基于jsp+mysql+SSM动物园门票预订网站系统-计算机毕业设计

项目介绍 现代化动物园管理系统日趋复杂&#xff0c;传统的以手工方式为主的管理操作模式&#xff0c;局限性日趋突显&#xff1a;宣传手段单一&#xff0c;管理效率低,系统采用了jsp的mvc框架,SSM(springMvcspringMybatis)框架进行开发,本系统使用mysql&#xff0c;独立运行,…

保姆级 | Python设置py2和py3共存

0x00 前言 在使用一些 python 脚本时&#xff0c;有些库只能用 python2.X 版本进行使用&#xff0c;而有些脚本却需要 python3.X 版本进行。如果不能在一个主机中设置 py2 和 py3 共存&#xff0c;那么会对自身的工作造成极大的不便。 0x01 环境说明 python-2.7.18python-3.11…

ATTCK-T1592-001-收集受害者主机信息-硬件

0X01 基础信息 具体信息详情ATT&CK编号T1592-001所属战术阶段侦察操作系统windows10 企业版 LTSC创建时间2022年11月7日监测平台火绒安全、火绒剑、sysmon 0X02技术原理 在入侵受害者之前&#xff0c;攻击者可能会收集有关受害者主机硬件的信息&#xff0c;这些信息可以在…

作为测试开发岗的面试官,我都是怎么选人的?

最近一段时间面试了不少人&#xff0c;主要是一些测试开发岗&#xff0c;中高级的初级的也都有&#xff1b;也有一些偏业务测试岗的候选人。总结出了一些方法论&#xff0c;或者说更多的是个人作为面试官所遵守的一套面试准则。 1.什么是面试&#xff1f; 面试不仅仅是你问我…

什么是数字签名?(数字签名与信息摘要又有什么关系?)

在上一篇博文【什么是信息摘要】结尾我给出了一个结论&#xff1a;“看来单纯的信息摘要技术还不能保证信息的完整性&#xff0c;即不能确定信息是否被篡改”&#xff0c;由此并引出了“数字签名”的概念。上一篇博文的地址在下面&#xff0c;没看的小伙伴可以看一下&#xff0…

CSDN第13次竞赛题解与总结

前言 2022/12/7 CSDN第13次竞赛「人民邮电出版社 & CSDN」联合主办。 本次奖品为《计算之魂》&#xff1a; 系统地讲解了计算机科学的精髓&#xff0c;不仅有助于了解计算机科学&#xff0c;更有助于了解 IT 产业的技术特点、培养一些特殊的思维方式、掌握信息时代特殊的…

开源web自定义表单有哪几个特点?

目前&#xff0c;市场正在蓬勃发展中&#xff0c;作为企业&#xff0c;采用传统表单的弊端也逐渐显现出来&#xff0c;面临比较大的问题就是办公效率得不到提升。在各行各业正积极筹备朝着数字化方向转型的背景下&#xff0c;采用开源web自定义表单可以弥补传统表单弊端&#x…

windows系统“彻底”隐藏任务栏

项目概况及目标 因某项目所需&#xff0c;要实现win10系统上任务栏的“彻底”隐藏。此处任务栏隐藏要求无键盘操作无法唤出。 方案一、任务栏设置 我们都知道&#xff0c;在任务栏设置中可以通过更改自动隐藏任务栏选项来实现任务栏的隐藏显示。 但是该方案的隐藏会在鼠标经…

论文速读系列一:VoteNet、CBGS、BirdNet、StarNet、STD

如有错误&#xff0c;恳请指出。 参考网上资料&#xff0c;对一些经典论文进行快速思路整理 文章目录1. VoteNet2. CBGS3. BirdNet4. StarNet5. STD参考网上资料&#xff0c;对一些经典论文进行快速思路整理 1. VoteNet paper&#xff1a;《Deep Hough Voting for 3D Object …

【正点原子FPGA连载】第三十章 基于OV5640的PL以太网视频传输实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第三十章 基于OV…

TextMeshPro源码移植-替换掉PackageManager

因为工作需要&#xff0c;使用类似美术字的效果 TextMeshPro支持各种效果&#xff0c;效能也可以&#xff08;到底这个可以到底是多可以&#xff0c;效率有多高&#xff0c;反正都是传说&#xff0c;哥也不知道&#xff09;&#xff0c;唯一缺点就是不支持多语言 只要你的项目…

Pandas使用手册

Pandas是一款快速&#xff0c;强大&#xff0c;灵活且易于使用的开源数据分析和操作工具&#xff0c; 建立在Python编程语言之上。 Pandas 前言Pandas是一款快速&#xff0c;强大&#xff0c;灵活且易于使用的开源数据分析和操作工具&#xff0c;建立在Python编程语言之上。 一…

[附源码]JAVA毕业设计食品销售网站(系统+LW)

[附源码]JAVA毕业设计食品销售网站&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…