绝对差值的和

news/2024/10/21 21:48:43/

问题分析:

  1. 取模操作的位置不正确

    • 你在计算 result - max_ 之前没有正确处理大数取模,这可能导致数值溢出。
  2. 最大差值减少量的计算

    • 算法中的内部循环效率较低,可以优化。

优化后的代码:

我们可以参考官方题解,优化算法并确保取模操作的正确性。

class Solution {
public:int minAbsoluteSumDiff(vector<int>& nums1, vector<int>& nums2) {int length_ = nums1.size();long result = 0;long max_ = 0;// 先计算初始的绝对差值和for (int i = 0; i < length_; i++) {result += abs(nums1[i] - nums2[i]);}// 找到可以替换的最大差值减少量vector<int> sorted_nums1 = nums1;sort(sorted_nums1.begin(), sorted_nums1.end());for (int i = 0; i < length_; i++) {int original_diff = abs(nums1[i] - nums2[i]);auto it = lower_bound(sorted_nums1.begin(), sorted_nums1.end(), nums2[i]);int new_diff = original_diff;if (it != sorted_nums1.end()) {new_diff = min(new_diff, abs(*it - nums2[i]));}if (it != sorted_nums1.begin()) {new_diff = min(new_diff, abs(*prev(it) - nums2[i]));}max_ = max(max_, original_diff - new_diff);}return (int)((result - max_) % 1000000007);}
};

详细解释优化后的代码:

  1. 计算初始绝对差值和

    for (int i = 0; i < length_; i++) {result += abs(nums1[i] - nums2[i]);
    }
    
    • 首先计算 nums1nums2 每个对应元素的绝对差值的和。
  2. nums1 进行排序

    vector<int> sorted_nums1 = nums1;
    sort(sorted_nums1.begin(), sorted_nums1.end());
    
    • 为了更高效地找到可以替换的元素,我们对 nums1 进行排序。
  3. 遍历每个元素并尝试找到最佳替换

    for (int i = 0; i < length_; i++) {int original_diff = abs(nums1[i] - nums2[i]);auto it = lower_bound(sorted_nums1.begin(), sorted_nums1.end(), nums2[i]);int new_diff = original_diff;if (it != sorted_nums1.end()) {new_diff = min(new_diff, abs(*it - nums2[i]));}if (it != sorted_nums1.begin()) {new_diff = min(new_diff, abs(*prev(it) - nums2[i]));}max_ = max(max_, original_diff - new_diff);
    }
    
    • 对于每个 nums2[i],使用二分查找在排序后的 nums1 中找到最接近的元素,并计算替换后的新差值。
    • 更新最大差值减少量 max_
  4. 计算最终结果并取模

    return (int)((result - max_) %
    

http://www.ppmy.cn/news/1540907.html

相关文章

适合学生党的平价蓝牙耳机有哪些?四款便宜又好的蓝牙耳机盘点

在寻找适合学生党的平价蓝牙耳机时&#xff0c;我们总是希望能在有限的预算内找到性能卓越、品质可靠的产品&#xff0c;毕竟&#xff0c;对于学生而言&#xff0c;性价比是选择耳机时的重要考量因素&#xff0c;那么适合学生党的平价蓝牙耳机有哪些&#xff1f;市面上琳琅满目…

【人工智能-初级】第6章 决策树和随机森林:浅显易懂的介绍及Python实践

文章目录 一、决策树简介二、决策树的构建原理2.1 决策树的优缺点优点缺点 三、随机森林简介3.1 随机森林的构建过程3.2 随机森林的优缺点优点缺点 四、Python实现决策树和随机森林4.1 导入必要的库4.2 加载数据集并进行预处理4.3 创建决策树模型并进行训练4.4 可视化决策树4.5…

电子商务网站维护技巧:保持WordPress、主题和插件的更新

在这个快节奏的数字时代&#xff0c;维护一个电子商务网站的首要任务之一是保持WordPress、主题和插件的最新状态。过时的软件不仅可能导致功能故障&#xff0c;还可能带来安全风险。本文将深入探讨如何有效地更新和维护您的WordPress网站&#xff0c;以确保其安全性和性能。 …

Dockerfile 中 Expose 命令的作用

Dockerfile 中 Expose 命令的作用 格式是&#xff1a;EXPOSE <端口1> [<端口2>...] 例如&#xff1a; EXPOSE 8080 8081 8082 特别注意&#xff1a; EXPOSE 指令是声明容器运行时提供服务的端口&#xff0c;请注意这只是一个声明&#xff0c;并没有实际作用&am…

中阳金融市场中的风险管理与投资优化策略

在全球经济波动性不断加剧的背景下&#xff0c;金融市场的复杂性与不确定性显著增加。作为国际金融市场中的重要组成部分&#xff0c;中阳金融市场吸引了大量投资者的关注。面对风险与机遇并存的市场环境&#xff0c;如何合理制定风险管理与投资优化策略&#xff0c;成为投资者…

PP-ChatOCRv3—文档场景信息抽取v3产线使用教程

文档场景信息抽取v3产线使用教程 1. 文档场景信息抽取v3产线介绍 文档场景信息抽取v3&#xff08;PP-ChatOCRv3&#xff09;是飞桨特色的文档和图像智能分析解决方案&#xff0c;结合了 LLM 和 OCR 技术&#xff0c;一站式解决版面分析、生僻字、多页 pdf、表格、印章识别等常…

简单易用的分类任务开源项目 :classification

项目地址&#xff1a;https://gitcode.net/EricLee/classification 物体识别分类&#xff0c;pytorch 目前数据集 包括 1&#xff09;Stanford Dogs 数据集 &#xff0c; 2&#xff09;14类静态手势自建数据集&#xff0c; 3&#xff09;imagenet 1000类数据集 classifica…

从传统到智能,从被动监控到主动预警,解锁视频安防平台EasyCVR视频监控智能化升级的关键密钥

视频监控技术从传统监控到智能化升级的过程是一个技术革新和应用场景拓展的过程。智能视频监控系统通过集成AI和机器学习算法&#xff0c;能够实现行为分析、人脸识别和异常事件检测等功能&#xff0c;提升了监控的准确性和响应速度。这些系统不仅用于传统的安全防护&#xff0…