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

leetcode 2918. 数组的最小相等和 中等

给你两个由正整数和 0 组成的数组 nums1 和 nums2 。

你必须将两个数组中的 所有 0 替换为 严格 正整数,并且满足两个数组中所有元素的和 相等 。

返回 最小 相等和 ,如果无法使两数组相等,则返回 -1 

示例 1:

输入:nums1 = [3,2,0,1,0], nums2 = [6,5,0]
输出:12
解释:可以按下述方式替换数组中的 0 :
- 用 2 和 4 替换 nums1 中的两个 0 。得到 nums1 = [3,2,2,1,4] 。
- 用 1 替换 nums2 中的一个 0 。得到 nums2 = [6,5,1] 。
两个数组的元素和相等,都等于 12 。可以证明这是可以获得的最小相等和。

示例 2:

输入:nums1 = [2,0,2,0], nums2 = [1,4]
输出:-1
解释:无法使两个数组的和相等。

提示:

  • 1 <= nums1.length, nums2.length <= 10^5
  • 0 <= nums1[i], nums2[i] <= 10^6

分析:不难想到,将数组中的所有 0 变为 1 能够使该数组所有元素的和最小。令 sum1, sum2 分别为 nums1,nums2 的不为零元素之和,cnt1,cnt2 为两个数组为 0 的元素数量,则两个数组可以达到的最小和为:sum1+cnt1,sum2+cnt2。

当两个数组至少都存在 1 个 0 时,一定存在答案,且答案为两个最小和的较大值。

当某个数组中不存在 0 时,如果另一个数组可达的最小和大于此数组的和,由于没有办法使此数组的和变大使得两个数组的和相等,返回-1.

long long minSum(int* nums1, int nums1Size, int* nums2, int nums2Size) {long long sum1 = 0, sum2 = 0;int zero1 = 0, zero2 = 0;for (int i = 0; i < nums1Size; i++) {sum1 += nums1[i];if (nums1[i] == 0) {sum1 += 1;zero1++;}}for (int i = 0; i < nums2Size; i++) {sum2 += nums2[i];if (nums2[i] == 0) {sum2 += 1;zero2++;}}if ((zero1 == 0 && sum2 > sum1) || (zero2 == 0 && sum1 > sum2)) {return -1;}return sum1 > sum2 ? sum1 : sum2;
}
http://www.dtcms.com/a/183284.html

相关文章:

  • Windows右键管理工具:轻松添加/删除/修改右键菜单项!
  • 常见的算法介绍
  • c++ struct类型加强
  • Python实例题:Python协程详解公开课
  • 如何让“语言不通”的纺织设备通过Profinet转CanOpen网关“聊”起来?
  • Ethercat转Profinet网关如何用“协议翻译术“打通自动化产线任督二脉
  • 数据库中的 Segment、Extent、Page、Row 详解
  • Vue3响应式原理源码解析(通俗易懂版)
  • C PRIMER PLUS——第7节:指针
  • OC语言学习——Foundation框架(上)
  • adamantix系统详细讲解
  • 数据结构与算法:树型dp
  • [C++] 大数减/除法
  • 鸿蒙 所有API缩略图鉴
  • Web3 初学者的第一个实战项目:留言上链 DApp
  • 质量保证计划,软件质量计划书,软件质量方案(word原件)
  • FHE 之 面向小白的引导(Bootstrapping)
  • 6.秒杀优化
  • HTTP:十三.HTTP日志
  • 数据库版本控制工具--flyway
  • CSDN 中 LaTeX 数学公式输入方法
  • 思考:(linux) tmux 超级终端快速入门的宏观思维
  • c++ using使用
  • 通信原理绪论
  • JDBC工具类的三个版本
  • 【python】json解析:invalid literal for int() with base 10: ‘\“\“‘“
  • 工厂节能新路径:精准节能的深度剖析
  • YOLO目标检测算法评估标准
  • C++STL——stack,queue
  • Python3(30) 正则表达式