【题目】*1818. 绝对差值和

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

使得∣nums1[i]−nums2[i]∣−∣nums1[j]−nums2[i]∣| nums1[i] - nums2[i] | - | nums1[j] - nums2[i] |∣nums1[i]−nums2[i]∣−∣nums1[j]−nums2[i]∣值最大的j就是我们要找的j
∣nums1[i]−nums2[i]∣−∣nums1[j]−nums2[i]∣| nums1[i] - nums2[i] | - | nums1[j] - nums2[i] |∣nums1[i]−nums2[i]∣−∣nums1[j]−nums2[i]∣的值尽可能大
∣nums1[i]−nums2[i]∣| nums1[i] - nums2[i] |∣nums1[i]−nums2[i]∣的值是固定的,所以需要 nums1[j]和nums2[i] 的值尽可能接近,所以对每个nums2[i]都需要找与它最接近的nums1[j]

二分查找的方法快速找到 nums 1数组中尽可能接近 nums 2 [i] 的元素。本来应该写两个二分查找,一个查找>=nums2[i]的最小元,一个查找<nums2[i]的最小元素,但本题只需要写前者,然后各自验证一下就可以了。

class Solution {public int minAbsoluteSumDiff(int[] nums1, int[] nums2) {int mod = 1000000007;int n = nums1.length;int[] arr = new int[n];System.arraycopy(nums1, 0, arr, 0, n);Arrays.sort(arr);int sum = 0, max = 0;for (int i = 0; i < n; i++) {int diff = Math.abs(nums1[i] - nums2[i]);sum = (sum + diff) % mod;int j = binarySearch(arr, nums2[i]);if (j < n) { // 检查nums1中>=nums2[i]的第一个元素max = Math.max(max, diff - (arr[j] - nums2[i]));}if (j > 0) { // 检查nums1中<nums2[i]的第一个元素max = Math.max(max, diff - (nums2[i] - arr[j - 1]));}}return (sum - max + mod) % mod;}public int binarySearch(int[] arr, int target) {int left = 0, right = arr.length - 1;if (arr[right] < target) {return right + 1;}while (left < right) {int mid = left + (right - left) / 2;if (arr[mid] < target) {left = mid + 1;} else {right = mid;}}return left;}
}

leetcode *1818. 绝对差值和(2021.7.14)相关推荐

  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. leetcode 1818 绝对值,排序,二分法,最大值

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

  7. 2021牛客第一场H.Hash Function—FFT求差值的卷

    https://ac.nowcoder.com/acm/contest/11166/H 官方题解. 比赛时,我们都是用暴力写的,数据太弱了,今天突然想起来,用fft写了一下. 主要使用fft求差值的卷 ...

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

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

  9. LeetCode 908. 最小差值 I

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

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

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

最新文章

  1. 手机 跑linux,你可曾想过在iOS上跑Linux?
  2. api数据库管理_API管理平台如何增强您的数据科学项目
  3. VMware共享文件夹遇到的问题
  4. Qt 编写应用程序升级的配置文件json 生成工具
  5. cf244D. Match amp; Catch 字符串hash (模板)或 后缀数组。。。
  6. pb中控件变颜色_基于GDI+技术开发工业仪表盘控件
  7. Origin好友列表离线的解决办法汇总
  8. 20210520:人脸识别-口罩mask快速抠取
  9. 电脑版美食大战老鼠放置html,美食大战老鼠2
  10. 【MUI框架】学习笔记整理 Day 2
  11. Flask框架学习笔记10-jinjia2模板继承实例
  12. php如何解析QQ音乐,QQ音乐解析接口分享
  13. CentOS 7安装WRF,SMOKE,CMAQ
  14. html5猜颜色游戏,好看漂亮的html5网页特效学习笔记(3)_猜猜下一个颜色是什么?...
  15. android手机文件快速扫描,并归类
  16. 自定义view仿写今日头条点赞动画
  17. 骁龙888发布,小米11首发,有14家厂商首批搭载!
  18. Redis的数据结构及底层原理
  19. 初识二维码 第二讲 二维码的结构
  20. Kotlin 4. Kotlin 函数注解:Suppress,Volatile, Synchronized, Bindable, RequiresApi,SerializedName

热门文章

  1. 软件项目工作量评估方法COSMIC重点笔记
  2. Agilent/安捷伦N6705B直流电源分析仪
  3. DBUtils工具类的使用方法详解
  4. 数据库迁移的几种方式
  5. 《球机3D定位解析及ONVIF实现》
  6. 大疆无人机实现目标定位
  7. 经纬度坐标转换为大地2000怎么转换_XOMAP-爬虫[4]-零代码实现将quot;地址quot;转换为“经纬度”坐标及“结构化地址”...
  8. 地区三级联动数据库(中国行政区划分数据库)【2018年1月】
  9. pyqt+pyqtgraph+lka(界面制作)
  10. 每日一题 - 微博系统崩溃,如何解决 ?