文章目录

  • 1. 题目
  • 2. 解题


前三题,拼手速。最后一题暴力超时。

1. 题目

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

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

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

在替换数组 nums1 中最多一个元素 之后 ,返回最小绝对差值和。
因为答案可能很大,所以需要对 10^9 + 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 <= 10^5
1 <= nums1[i], nums2[i] <= 10^5

https://leetcode-cn.com/contest/weekly-contest-235/problems/minimum-absolute-sum-difference/

2. 解题

  • 对 nums1 排序,遍历 nums2 中的数字 x
  • 在 nums1 中二分查找 x 前后的数字,记录最小差值,和 最大的和 的下降量
class Solution {public:int minAbsoluteSumDiff(vector<int>& nums1, vector<int>& nums2) {int n = nums1.size();long long ans = 0, mod = 1e9+7;vector<int> t(n);for(int i = 0; i < n; ++i){ans += abs(nums1[i]-nums2[i]);t[i] = nums1[i];}sort(t.begin(), t.end());int maxdelta = 0;for(int i = 0; i < n; ++i){int target = nums2[i], diff = 2e5;auto it = lower_bound(t.begin(),t.end(),target);if(it != t.end()){diff = min(diff, abs(target-*it)); // 最接近的数的差值}auto it1 = upper_bound(t.begin(),t.end(),target);if(it1 != t.begin()){it1--;diff = min(diff, abs(target-*it1)); // 最接近的数的差值}// 对答案缩小有贡献,取最大的maxdelta = max(maxdelta, abs(nums1[i]-nums2[i])-diff);}ans -= maxdelta; //减去最大的缩小值return ans%mod;}
};

420 ms 101.7 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1818. 绝对差值和(二分查找)相关推荐

  1. leetcode 1818. 绝对差值和

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

  2. [Golang]力扣Leetcode - 374. 猜数字大小(二分查找)

    [Golang]力扣Leetcode - 374. 猜数字大小(二分查找) 题目:猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪个数字. 如果你猜错了,我 ...

  3. LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根

    LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根 题目描述 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型 ...

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

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

  5. LeetCode 900. RLE 迭代器(模拟/二分查找)

    文章目录 1. 题目 2. 解题 2.1 直接模拟 2.2 二分查找 1. 题目 编写一个遍历游程编码序列的迭代器. 迭代器由 RLEIterator(int[] A) 初始化,其中 A 是某个序列的 ...

  6. LeetCode 275. H指数 II(二分查找)

    1. 题目 给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列.编写一个方法,计算出研究者的 h 指数. h 指数的定义: "h 代表"高引用次数&q ...

  7. LeetCode 392. 判断子序列(双指针二分查找)

    1. 题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母.字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 ...

  8. leetcode练习一:数组(二分查找、双指针、滑动窗口)

    文章目录 一. 数组理论基础 二. 二分查找 2.1 解题思路 2.2 练习题 2.2.1 二分查找(题704) 2.2.2 搜索插入位置(题35) 2.2.3 查找排序数组元素起止位置(题34) 2 ...

  9. LeetCode 374. 猜数字大小(二分查找)

    1. 题目 我们正在玩一个猜数字游戏. 游戏规则如下: 我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字. 每次你猜错了,我会告诉你这个数字是大了还是小了. 你调用一个预先定义好的接口 gu ...

最新文章

  1. 用模板实现单例模式(线程安全)、模板方式实现动态创建对象
  2. TensorFlow – A Collection of Resources
  3. 【Linux 内核】编译 Linux 内核 ⑤ ( 查看 .config 编译配置文件 | 正式编译内核 )
  4. android--service之aidl传递复杂对象,Android--Service之AIDL传递复杂对象
  5. 设置NTFS文件访问权限
  6. HashMap源码解释
  7. 阿里云原生张羽辰:服务发现技术选型那点事儿
  8. cotlin java go_Aspectj 在Android中的简单使用(Java + Kotlin)-Go语言中文社区
  9. 因为梦想 书送远方 《数据化运营》免费领取
  10. cmd 终端快速查看自己的ip地址
  11. 一款性价比远超visio的画图小工具-Dia Diagram Editor(开源-跨平台)
  12. mysql报错不停止继续执行_mysql 8 启动失败(本地计算机上的mysql服务启动后停止。某些服务再未由其他服务或程序使用时将自动停止)...
  13. java课程设计象棋_java课程设计 中国象棋
  14. 【Scratch】青少年蓝桥杯_每日一题_11.25_小猫碰到黑块和白块
  15. 学习数织物密度/经纬密
  16. ML之XGBoost:《XGBoost: A Scalable Tree Boosting System》的翻译与解读
  17. java编写一个学生类和教师类_JAVA:1、编写一个学生类,类名为Student,包含如下成员:...
  18. 递归算法实例应用(五)
  19. 今天14:00 | NeurIPS 专场六 青年科学家专场
  20. 团队协作与团队内部竞争_为什么您的团队可能在协作游戏中失败

热门文章

  1. keyshot环境素材文件_快速学会keyshot基础渲染的步骤
  2. Flask-DebugToolbar的配置
  3. Random Forest算法简介
  4. mysql 表的存储类型_MySQL数据表存储引擎类型及特性
  5. js反混淆还原工具_SATURN反混淆框架
  6. linux内核的I2C子系统详解1——I2C总线概览、驱动框架概览
  7. sql server常用函数积累
  8. C++ Primer 有感(重载操作符)
  9. [Socket]BSD socket简易入门
  10. Checking battery state… ubuntu