题目

给你两个正整数数组 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

题解

因为最多只能改变一个值
所以对于任何一个i,只有一个j满足条件
我们的任务就是找到一个使得|nums1[i] - nums2[i]| - |nums1[j] - nums2[i]|值最大的j

class Solution {public:const int mod = 1000000007;int minAbsoluteSumDiff(vector<int>& nums1, vector<int>& nums2) {vector<int> tmp(nums1);sort(tmp.begin(),tmp.end());int sum = 0;int len = nums1.size();int res = 0;for(int i=0;i<len;i++){int cha = abs(nums1[i] - nums2[i]);sum  = (sum+cha)%mod;if(cha==0)continue;int index = lower_bound(tmp.cbegin(),tmp.cend(),nums2[i]) - tmp.cbegin();if(index < len)res = max(res,cha - abs(tmp[index] - nums2[i]));if(index > 0)res = max(res,cha - abs(tmp[index-1] - nums2[i]));}return (sum - res + mod)%mod;}
};

【LeetCode】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. 力扣—1818.绝对差值和

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

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

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

  5. leetcode 1818 绝对值,排序,二分法,最大值

    1818. 绝对差值和 难度中等130收藏分享切换为英文接收动态反馈 给你两个正整数数组 nums1 和 nums2 ,数组的长度都是 n . 数组 nums1 和 nums2 的 绝对差值和 定义为 ...

  6. LeetCode 910. 最小差值 II(贪心)

    1. 题目 给定一个整数数组 A,对于每个整数 A[i],我们可以选择 x = -K 或是 x = K,并将 x 加到 A[i] 中. 在此过程之后,我们得到一些数组 B. 返回 B 的最大值和 B ...

  7. LeetCode 908. 最小差值 I

    1. 题目 给定一个整数数组 A,对于每个整数 A[i],我们可以选择任意 x 满足 -K <= x <= K,并将 x 加到 A[i] 中. 在此过程之后,我们得到一些数组 B. 返回 ...

  8. sql 差值_SQL_LeetCode的连续性题目

    本篇分享一道来自于leetcode中文版第180题,关于SQL处理连续性的题目. 原题目:编写一个 SQL 查询,查找所有至少连续出现三次的数字. 数据表Logs如下: ID Num 1 1 2 1 ...

  9. 21-7-14 绝对差值和

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

最新文章

  1. SD-WAN — 核心能力
  2. 分布式理论(一) - CAP定理
  3. iOS开发 Xcode8中遇到的问题及改动
  4. python标准库time_Python3标准库:time时钟时间
  5. SAP UI5 未来发展的趋势之一:拥抱 TypeScript
  6. c语言按照字节读取任何文件,【文件操作】【按字节读取】求鉴定问题……
  7. 分享一个非常不错的SSH工具
  8. Java知识系统回顾整理01基础01第一个程序05Eclipse中运行Java程序
  9. 从整体上看UML——思维导图
  10. html日期选择器小日历样式,9 款样式华丽的 jQuery 日期选择和日历控件
  11. amd cpu 安卓模拟器_AMD的CPU如何运行安卓模拟器?
  12. 自我介绍到底有多重要?如何做好自我介绍?
  13. 少儿编程 电子学会图形化编程等级考试Scratch四级真题解析(判断题)2022年3月
  14. 开源·共享·创新|2020年中国.NET开发者大会圆满收官!
  15. linux ubuntu bionic,在Ubuntu 18.04 Bionic Beaver Linux上安装和设置KVM
  16. 00后面试华为软件测试工程师,竭尽全力拿到15K。。。。。
  17. 【架构师-系统设计】理解分布式系统的CAP和BASE理论
  18. 这些软件可以快速实现图片翻译文字
  19. 2019-信息安全管理与评估
  20. vim无法退出保存的问题(:wq不生效)

热门文章

  1. BUGKU (Take the maze)
  2. SSD系列算法原理讲解----(1)SSD系列算法介绍(主干网络、多尺度Feature Map预测)(笔记)
  3. java 线性回归_java实现简单线性回归
  4. TCP 的 NACK 与 SACK
  5. textarea 中如何阻止默认的回车换行事件?
  6. 基于matlab的傅里叶变换
  7. Object.assign()用法和特性
  8. ReleaseCapture 以及 SetCapture 函数 及其应用
  9. 提示用户更改计算机密码,验证你的Microsoft账户 温馨提示:在个人电脑上更改微软账户密码...
  10. 通达信大智慧同花顺益盟操盘手股票指标公式编写从入门到精通-七天学会指标编写