leetcode 1818. 绝对差值和

image.png
给你两个正整数数组 nums1 和 nums2 ,数组的长度都是 n 。

数组 nums1 和 nums2 的 绝对差值和 定义为所有 |nums1[i] - nums2[i]|(0 <= i < n)的 总和(下标从 0 开始)。

你可以选用 nums1 中的 任意一个 元素来替换 nums1 中的 至多 一个元素,以 最小化 绝对差值和。

在替换数组 nums1 中最多一个元素 之后 ,返回最小绝对差值和。因为答案可能很大,所以需要对 109 + 7 取余 后返回。

|x| 定义为:

  • 如果 x >= 0 ,值为 x ,
  • 如果 x <= 0 ,值为 -x

示例 1:输入:nums1 = [1,7,5], nums2 = [2,3,5]
输出:3
解释:有两种可能的最优方案:
- 将第二个元素替换为第一个元素:[1,7,5] => [1,1,5] ,或者
- 将第二个元素替换为第三个元素:[1,7,5] => [1,5,5]
两种方案的绝对差值和都是 |1-2| + (|1-3| 或者 |5-3|) + |5-5| = 3
示例 2:输入:nums1 = [2,4,6,8,10], nums2 = [2,4,6,8,10]
输出:0
解释:nums1 和 nums2 相等,所以不用替换元素。绝对差值和为 0
示例 3:输入:nums1 = [1,10,4,4,2,7], nums2 = [9,3,5,1,7,4]
输出:20
解释:将第一个元素替换为第二个元素:[1,10,4,4,2,7] => [10,10,4,4,2,7]
绝对差值和为 |10-9| + |10-3| + |4-5| + |4-1| + |2-7| + |7-4| = 20

解题思路

  • 绝对差值,可以看为由nums1[i]、nums2[i]两个元素组成,所以我们这次需要处理的就是n个这样的数对。
  • 对于每个nums2[i],我们使用二分法,可以在nums1数组中快速找到最接近nums2[i]的元素,这个元素就是可以替换nums1[i]的元素,通过比较原nums1[i]、nums2[i]的差值和替换以后的差值,这个差值就是对于绝对差值和的减益,选出最大的那个减益,就是使得绝对差值和最小化的方案。

代码

class Solution {public int minAbsoluteSumDiff(int[] nums1, int[] nums2) {
int mod=1000000007;long dif = 0;int n = nums1.length,  max = 0, maxi = -1;List<int[]> list = new ArrayList<>();for (int i = 0; i < n; i++) {int abs = Math.abs(nums1[i] - nums2[i]);if (abs != 0) {list.add(new int[]{nums2[i], abs});}dif += abs;}Arrays.sort(nums1);int gap=0;for (int i=0;i<list.size();i++){int abs=100001;int r = bs(nums1, list.get(i)[0]),l=r-1;if(r<n)abs=Math.min(abs,Math.abs(nums1[r]-list.get(i)[0]));if(l>=0)abs=Math.min(abs,Math.abs(nums1[l]-list.get(i)[0]));gap=(Math.max(gap,list.get(i)[1]-abs));}return (int)((dif-gap)%mod);}public int bs(int[] nums1,int tar ){int l=0,r=nums1.length-1;while (l<=r){int mid=(r-l)/2+l;if(nums1[mid]>=tar)r=mid-1;else l=mid+1;}return l;}
}

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

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

相关文章

【转载】keil5中加入STM32F10X_HD,USE_STDPERIPH_DRIVER的原因

初学STM32&#xff0c;在RealView MDK 环境中使用STM32固件库建立工程时&#xff0c;初学者可能会遇到编译不通过的问题。出现如下警告或错误提示&#xff1a; warning: #223-D: function "assert_param" declared implicitly;assert_param(IS_GPIO_ALL_PERIPH(GPIOx…

下岗职工_下岗后我如何获得多位软件工程师的面试

下岗职工“Opportunities to find our deeper powers come when life seems most challenging.” -Joseph Campbell“当生活似乎最具挑战性时&#xff0c;就有机会找到我们更深层的力量。” 约瑟夫坎贝尔 I was recently laid off for the first time in my life. I realized t…

1846. 减小和重新排列数组后的最大元素

给你一个正整数数组 arr 。请你对 arr 执行一些操作&#xff08;也可以不进行任何操作&#xff09;&#xff0c;使得数组满足以下条件&#xff1a; arr 中 第一个 元素必须为 1 。任意相邻两个元素的差的绝对值 小于等于 1 &#xff0c;也就是说&#xff0c;对于任意的 1 <…

bashdb常用命令

一、列出代码和查询代码类&#xff1a; l 列出当前行以下的10行- 列出正在执行的代码行的前面10行. 回到正在执行的代码行w 列出正在执行的代码行前后的代码/pat/ 向后搜索pat&#xff1f;pat&#xff1f;向前搜索pat二、Debug控制类&#xff1a; h 帮助help 命令 得到…

podcast播客资源_为什么播客是我的新维基百科-完美的非正式学习资源

podcast播客资源In this article, I’ll explain why podcasts replaced a lot of my Wikipedia usage for informal learning. I’ll also talk about how I listen to 5 hours of podcasts every day.在本文中&#xff0c;我将解释为什么播客代替了我的许多Wikipedia用于非正…

剑指 Offer 53 - I. 在排序数组中查找数字 I(二分法)

统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums [5,7,7,8,8,10], target 8 输出: 2 示例 2: 输入: nums [5,7,7,8,8,10], target 6 输出: 0 限制&#xff1a; 0 < 数组长度 < 50000 解题思路 先用二分法查找出其中一个目标元素再向目标元素两边查找…

MVC与三层架构区别

我们平时总是将三层架构与MVC混为一谈&#xff0c;殊不知它俩并不是一个概念。下面我来为大家揭晓我所知道的一些真相。 首先&#xff0c;它俩根本不是一个概念。 三层架构是一个分层式的软件体系架构设计&#xff0c;它可适用于任何一个项目。 MVC是一个设计模式&#xff0c;它…

tensorflow 实现逻辑回归——原以为TensorFlow不擅长做线性回归或者逻辑回归,原来是这么简单哇!...

实现的是预测 低 出生 体重 的 概率。尼克麦克卢尔&#xff08;Nick McClure&#xff09;. TensorFlow机器学习实战指南 (智能系统与技术丛书) (Kindle 位置 1060-1061). Kindle 版本. # Logistic Regression #---------------------------------- # # This function shows ho…

sdlc 瀑布式 生命周期_SDLC指南–软件开发生命周期的阶段和方法

sdlc 瀑布式 生命周期When I decided to teach myself how to code almost four years ago I had never heard of, let alone thought about, the software development life cycle.当我差不多四年前决定教自己如何编码时&#xff0c;我从未听说过软件开发生命周期&#xff0c;…

剑指 Offer 48. 最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串&#xff0c;计算该最长子字符串的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子…

Mysql-my-innodb-heavy-4G.cnf配置文件注解

Mysql-同Nginx等一样具备多实例的特点&#xff0c;简单的讲就是在一台服务器上同时开启多个不同的服务端口&#xff08;3306,3307&#xff09;同时运行多个Mysql服务进程&#xff0c;这些服务进程通过不同的socket监听不同的服务端口来提供服务。这些Mysql多实例公用一套Mysql安…

is 和 == 的区别

is 和 操作符的区别 python官方解释&#xff1a; 的meaning为equal&#xff1b; is的meaning为object identity&#xff1b; is 判断对象是否相等&#xff0c;即身份是否相同&#xff0c;使用id值判断&#xff1b; 判断对象的值是否相等。id值是什么&#xff1f;id()函数官网…

win10管理凌乱桌面_用于管理凌乱的开源存储库的命令行技巧

win10管理凌乱桌面Effective collaboration, especially in open source software development, starts with effective organization. To make sure that nothing gets missed, the general rule, “one issue, one pull request” is a nice rule of thumb.有效的协作(特别是…

JAVA数组Java StringBuffer 和 StringBuilder 类

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/80215173 Java StringBuffer 和 StringBuilder 类 当对字符串进行修改的时候&#xff0c;需要使用 StringBuffer 和 StringBuilder 类。 和 Str…

strlen和sizeof的长度区别

strlen返回字符长度 而sizeof返回整个数组占多长&#xff0c;字符串的\0也会计入一个长度转载于:https://www.cnblogs.com/DawaTech/p/8086055.html

了解如何使用Yii2 PHP框架创建YouTube克隆

Yii is a fast, secure, and efficient PHP framework used to create all kinds of web apps. Weve released a full video course on how to use the Yii2 framework.Yii是一个快速&#xff0c;安全&#xff0c;高效PHP框架&#xff0c;用于创建各种Web应用程序。 我们已经发…

剑指 Offer 66. 构建乘积数组

给定一个数组 A[0,1,…,n-1]&#xff0c;请构建一个数组 B[0,1,…,n-1]&#xff0c;其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]A[0]A[1]…A[i-1]A[i1]…A[n-1]。不能使用除法。 示例: 输入: [1,2,3,4,5] 输出: [120,60,40,30,24] 提示&#xff1a; 所有…

Statement与PreparedStatement的区别

Statement与PreparedStatement的区别 PreparedStatement预编译SQL语句&#xff0c;性能好。 PreparedStatement无序拼接SQL语句&#xff0c;编程更简单. PreparedStatement可以防止SQL注入&#xff0c;安全性好。 Statement由方法createStatement()创建&#xff0c;该对象用于发…

剑指 Offer 45. 把数组排成最小的数

输入一个非负整数数组&#xff0c;把数组里所有数字拼接起来排成一个数&#xff0c;打印能拼接出的所有数字中最小的一个。 示例 1: 输入: [10,2] 输出: “102” 示例 2: 输入: [3,30,34,5,9] 输出: “3033459” 提示: 0 < nums.length < 100 说明: 输出结果可能非…

python 科学计算机_在这个免费的虚拟俱乐部中学习计算机科学和Python的基础知识

python 科学计算机Are you learning how to code in 2020? 您是否正在学习2020年编码&#xff1f; Or are you already working as a developer but want to learn computer science fundamentals? 还是您已经在从事开发人员工作&#xff0c;但想学习计算机科学基础知识&…