题目描述:
给你两个正整数数组 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

提示:
n == nums1.length
n == nums2.length
1 <= n <= 105
1 <= nums1[i], nums2[i] <= 105

方法1:
主要思路:解题链接汇总
(1)先统计原来两个数组中各个位置处的绝对值和总的绝对值之和;
(2)然后对数组1进行去重排序;
(3)然后对数组2中进行遍历,找出每一个元素在数组1中最接近的数字;
(4)确定该数字作为可能的替换数字时,要减小的绝对值,保存最大的减少的绝对值;

class Solution {public:int minAbsoluteSumDiff(vector<int>& nums1, vector<int>& nums2) {int n = nums1.size();long long res=0;vector<int> arr(n,0);for(int i=0;i<n;++i){arr[i]=abs(nums1[i]-nums2[i]);res+=arr[i];}int max_diff=0;set<int> sort_nums1(nums1.begin(),nums1.end());for(int i=0;i<n;++i){auto it=sort_nums1.lower_bound(nums2[i]);max_diff=max(max_diff,arr[i]-abs(nums2[i]-*it));if(it!=sort_nums1.begin()){max_diff=max(max_diff,arr[i]-abs(nums2[i]-*(--it)));}}return (res-max_diff)%1000000007;}
};

1818 绝对差值和相关推荐

  1. leetcode 1818. 绝对差值和

    给你两个正整数数组 nums1 和 nums2 ,数组的长度都是 n . 数组 nums1 和 nums2 的 绝对差值和 定义为所有 |nums1[i] - nums2[i]|(0 <= i ...

  2. LeetCode 1818. 绝对差值和(二分查找)

    文章目录 1. 题目 2. 解题 前三题,拼手速.最后一题暴力超时. 1. 题目 给你两个正整数数组 nums1 和 nums2 ,数组的长度都是 n . 数组 nums1 和 nums2 的 绝对差 ...

  3. 【LeetCode】1818. 绝对差值和

    题目 给你两个正整数数组 nums1 和 nums2 ,数组的长度都是 n . 数组 nums1 和 nums2 的 绝对差值和 定义为所有 |nums1[i] - nums2[i]|(0 <= ...

  4. 力扣—1818.绝对差值和

    题目: 给你两个正整数数组 nums1 和 nums2 ,数组的长度都是 n . 数组 nums1 和 nums2 的 绝对差值和 定义为所有 |nums1[i] - nums2[i]|(0 < ...

  5. 力扣 1818. 绝对差值和 数学 二分

    https://leetcode-cn.com/problems/minimum-absolute-sum-difference/ 思路:首先计算sum=∑i=0n∣ai−bi∣sum=\sum_{i ...

  6. python时区转换_在python 不同时区之间的差值与转换方法

    之前有个程序,里面有个时间部分是按照国内时区,也就是东八区,来写的,程序中定义了北京时间2点到八点进行检查:后面程序在国外机器上,例如说韩国,欧美等,执行的时候发现会有时间上的问题,因为获取的是机器的 ...

  7. ibm db2获取目标时间与当前时间的差值_高帧频视觉实时目标检测系统

    基于机器视觉的智能目标检测系统应用非常广泛,尤其在航天军工等领域中,经常涉及高速目标的实时检测和控制,对目标检测的智能性和实时性提出了更严格的要求.在这种应用中,视觉系统相对雷达.声纳具有信息量大.抗 ...

  8. CV03-双线性差值pytorch实现

    一.双线性差值 1.1 公式 在理解双线性差值(Bilinear Interpolation)的含义基础上,参考pytorch差值的官方实现注释,自己实现了一遍. 差值就是利用已知点来估计未知点的值. ...

  9. (C++)设计一个程序能计算一个日期加上若干天后是什么日期and计算日期差值

    输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数. 输出m行,每行按yyyy-mm-dd的个数输出. #include<cstdio>//判断是否是闰年 bool ...

  10. mysql取最早和最晚时间_SQL Server 按日期选择最晚日期与最早日期对应的数的差值...

    感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!表结构如下 number date 8 2009/1/11 2:00 7 2009/1/11 5:00 6 2009/1/11 ...

最新文章

  1. java语法基础(总结)
  2. oracle第二章数据的运用,第二章:oracle_sql语句之限制(where子句)和排列数据(order by子句)...
  3. 【20171115中】nmap 使用脚本爆破telnet密码
  4. ArrayList实现原理
  5. Golang 函数function
  6. 来了!8月10日19:00商汤全球校招空宣!现场发放专属内推码
  7. HihoCoder - 1175 拓扑排序·二
  8. @echo off是什么意思_为什么执行自己的程序要在前面加./
  9. wsdl 架构验证警告:来自命名空间_金九银十,正在面试吗?面试官必问:JVM架构解读,查漏补缺...
  10. 基于ARM的智能灯光控制系统(11)状态更新
  11. CP_EndPoint环境中的Hotspot Settings
  12. MyBatis入门使用及其四大核心对象
  13. JAVA经典面试题附答案(持续更新版)
  14. pe擦除服务器硬盘,老毛桃winpe分区助手删除分区后如何用Gutmann算法擦除硬盘数据?...
  15. springboot 接入 cachecloud redis 实践
  16. GAN的一些经典网络的基本思想
  17. 寂静岭3java攻略_《寂静岭3》完整流程攻略
  18. 数学在计算机方面的应用论文参考文献,数学论文参考文献
  19. 统计学基础知识梳理(三)
  20. 如何选择股票投资的行业和公司

热门文章

  1. 房产中介管理系统网站完整源码
  2. 个性推荐①——系统总结个性化推荐系统
  3. OpenCV IplImage图片结构
  4. Unity UGUI坐标转换
  5. JWplayer入门及使用
  6. 银行叫号排队系统C语言,【分享】C语言 银行取票排队系统
  7. 最小二乘法的曲线拟合
  8. 遥感学习笔记:遥感数据源免费数据获取途径
  9. 乐高叉车wedo教案_乐高 WEDO自带12个活动教学参考书.pdf
  10. Tuxera NTFS2023Mac读写ntfs磁盘工具