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

文章目录

    • 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阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

LeetCode 1819. 序列中不同最大公约数的数目

文章目录1. 题目2. 解题1. 题目 给你一个由正整数组成的数组 nums 。 数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。 例如&#xff0c;序列 [4,6,16] 的最大公约数是 2 。 数组的一个 子序列 本质是一个序列&#xff0c;可以通过删除数组中的某些元素…

1803无法升级到2004_汽车排放国标是什么意思:1/2/3/4/5/6的升级是为了什么?

全球各大汽车工业强国或地区都有汽车排放制造标准&#xff0c;知名度较高的有以下四组。美标欧标日标国标在上述标准中欧洲与日本开始实施的节点比较早&#xff0c;美国轻型汽车排放法规「Tier」与上世纪90年代开始实施&#xff0c;国标则是从2000年才开始。之所以要为汽车制造…

LeetCode LCP 28. 采购方案(排序 + 二分查找)

文章目录1. 题目2. 解题1. 题目 小力将 N 个零件的报价存于数组 nums。 小力预算为 target&#xff0c;假定小力仅购买两个零件&#xff0c;要求购买零件的花费不超过预算&#xff0c;请问他有多少种采购方案。 注意&#xff1a;答案需要以 1e9 7 (1000000007) 为底取模&…

@service注解_Spring 中 @Component、@Service 等注解如何被解析?

前言Component和Service都是工作中常用的注解&#xff0c;Spring如何解析&#xff1f;1.Component解析流程找入口Spring Framework2.0开始&#xff0c;引入可扩展的XML编程机制&#xff0c;该机制要求XML Schema命名空间需要与Handler建立映射关系。该关系配置在相对于classpat…

svg载入html,SVG系列教程:SVG简介与嵌入HTML页面的方式

随着技术向前的推进&#xff0c;SVG相关的讨论也越渐频繁。为了紧跟时代的步伐&#xff0c;我也开始步入SVG相关技术的探索与学习之中。从这篇文章开始会在W3cplus站点上陆续向大家推出有关于SVG相关的教程、译文或案例等。感兴趣的同学可以跟随着教程一起了解与学习SVG相关的知…

LeetCode LCP 30. 魔塔游戏(优先队列)

文章目录1. 题目2. 解题1. 题目 小扣当前位于魔塔游戏第一层&#xff0c;共有 N 个房间&#xff0c;编号为 0 ~ N-1。 每个房间的补血道具/怪物对于血量影响记于数组 nums&#xff0c;其中&#xff1a; 正数表示道具补血数值&#xff0c;即血量增加对应数值&#xff1b;负数表…

字符变量赋值规则_Java的常量、变量、数据类型(基础篇二)

标识符标识符&#xff1a;是指在程序中自己定义的内容&#xff0c;如类名、方法名、变量名等等。命名规则&#xff1a;是有硬性要求的关键字&#xff1a;是指Java已经定义好的单词&#xff0c;具有特殊含义&#xff0c;比如public、static、class、void等等标识符可以包含英文字…

selenium定位输入框_[Selenium 粗浅笔记] 用Selenium填写表单

要做什么Steiner&#xff1a;[Selenium] 简单介绍​zhuanlan.zhihu.com我们用刚才学到的知识去用selenium来模拟与表单交互&#xff0c;还好有个可以练习的网站 test website 拿这个网站来试试输入用户名&#xff0c;密码ps: 其实这个自己在本地写个网页就行了&#xff0c;ajax…

LeetCode LCP 29. 乐团站位(数学 等差数列)

文章目录1. 题目2. 解题2.1 模拟超时2.2 优化通过1. 题目 某乐团的演出场地可视作 num * num 的二维矩阵 grid&#xff08;左上角坐标为 [0,0])&#xff0c;每个位置站有一位成员。 乐团共有 9 种乐器&#xff0c;乐器编号为 1~9&#xff0c;每位成员持有 1 个乐器。 为保证声…

python三引号注释_python使用三引号来注释的具体原因?

Why didnt python just use the traditional style of comments like C/C/Java uses: /** * Comment lines * More comment lines */ // line comments // line comments // Is there a specific reason for this or is it just arbitrary? 解决方案 Python doesnt use triple…

天玑720支持鸿蒙系统吗,天玑720属于骁龙多少 天玑720处理器相当于骁龙几

天玑700是一款最新推出的5G入门级别的处理器&#xff0c;那么这款手机芯片相当于骁龙多少处理器&#xff1f;处理器性能怎么样&#xff1f;小编为大家带来最新的手机资讯对此感兴趣的小伙伴&#xff0c;快来看看吧。天玑700相当于骁龙多少&#xff1f;在手机的性能方面相当于骁…

html5 职工入职后台管理系统_ChemCMS是一款基于GO+PHP+MYSQL+HTML5构建的化学内容管理系统

ChemCMS是一款基于GOPHPMYSQLHTML5构建的化学内容管理系统&#xff0c;旨在提高化学类企业信息化管理水平&#xff0c;ChemCMS提供了行业所需的库存管理、订单管理、产品管理、客户管理、权限管理全部解决方案&#xff0c;同时我们还提供一体化的在线商城解决方案&#xff0c;大…

oem718d 基准站设置_RTK电台、网络模式作业设置流程

RTK作业的简要流程仪器架设完成基准站和移动站硬件架设与配置&#xff0c;搭建作业的硬件环境。新建工程创建工程&#xff0c;配置参数、坐标等基础信息&#xff0c;完成作业所需的数据基础。求转换参数匹配工程所需平面坐标和默认经纬度坐标&#xff0c;在作业中直接获得所需目…

委托和事件

事件的由来 上文说到委托的安全性不佳&#xff0c;于是我们要将委托本身私有化&#xff0c;但还要暴露若干方法让外界使用。其中最重要的必然就是为委托挂接方法和调用委托&#xff0c;以便间接地调用委托所代表方法。那么事件event关键字就是c#提供给我们的一个语法糖。他并没…

HiveQL: 数据操作

文章目录1. 向管理表中装载数据2. 通过查询语句向表中插入数据3. 动态分区插入4. 从单个查询语句创建表并加载数据5. 导出数据学习自《Hive编程指南》 1. 向管理表中装载数据 hive (default)> load data local inpath "/home/hadoop/workspace/student.txt">…

formdata.append加多个值_redis的五种数据结构和应用场景:微博微信点赞+加购物车等...

Redis五种数据结构如下&#xff1a;1.String 字符串类型是redis中最基本的数据类型&#xff0c;一个key对应一个value。String类型是二进制安全的&#xff0c;意思是 redis 的 string 可以包含任何数据。如数字&#xff0c;字符串&#xff0c;jpg图片或者序列化的对象。2.Hash …

iOS开发-自动隐藏键盘及状态栏

1.隐藏状态栏 iOS升级至7.0以后&#xff0c;很多API被废止&#xff0c;其中原有隐藏状态栏StatusBar的方法就失效了。 原有方案 [[UIApplication sharedApplication] setStatusBarHidden:YES]; 但很不幸&#xff0c;在后来的版本中实效了&#xff0c;因此我们可以使用新的API来…

python gevent模块 下载_【python安全攻防】包、模块、类、对象

终于又到了一周一度的整理博客的时间了&#xff0c;博主平时课余时间看书&#xff0c;周末统一整理&#xff0c;坚持周更真是爱了爱了 &#xff5e;今天要说的是python面向对象这一部分的内容&#xff0c;今天这是基础篇的第二篇&#xff0c;也是最后一篇。说来基础篇还真是少呢…

LeetCode LCP 33. 蓄水(暴力枚举)

文章目录1. 题目2. 解题1. 题目 给定 N 个无限容量且初始均空的水缸&#xff0c;每个水缸配有一个水桶用来打水&#xff0c;第 i 个水缸配备的水桶容量记作 bucket[i]。小扣有以下两种操作&#xff1a; 升级水桶&#xff1a;选择任意一个水桶&#xff0c;使其容量增加为 buck…

302状态码_你见过 HTTP 哪些状态码?

❝好久没有写技术文章&#xff0c;今天在四川广元无事&#xff0c;总结一篇。附一张今天早上在嘉陵江遇见的白鹡鸰 (不是我拍的)❞白鹡鸰101 Switch Protocol200 Ok201 Created204 No Content206 Partial Content301 Moved Permanently302 Found304 Not Modified307 Temporary …