当前位置: 首页 > news >正文

绝对差值的和

问题分析:

  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.mrgr.cn/news/55557.html

相关文章:

  • 1. 路由定义
  • 使用finalshell远程ssh连接ubuntu
  • Unity DOTS中的Archetype与Chunk
  • 博客|基于springBoot的精简博客系统设计与实现(附项目源码+论文+数据库)
  • Java中的I/O流分类简介
  • Mendix:禁用按钮点击事件校验文本框输入
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-1
  • 高级java每日一道面试题-2024年10月19日-消息队列[RabbitMQ]-RabbitMQ中积压了大量的消息,如何处理?
  • Saprk:数据插入的优化(forachPartition)
  • 电能表预付费系统-标准传输规范(STS)(15)
  • Hadoop---HDFS(2)
  • A Graph-Transformer for Whole SlideImage Classification文献笔记
  • arm_acle.h找不到
  • 基于递推式最小二乘法的PMSM参数辨识MATLAB仿真模型
  • 六、栈————相关概念详解
  • ChatGPT4o、o1 谁才是最佳大模型?
  • DDD话语批评之一:评“状态和事件本质相同”[全文]
  • 稀疏表示的图像修复、图像退化、白噪声
  • Linux conda activate报错:CondaError: Run ‘conda init‘ before ‘conda activate‘
  • 算法|牛客网华为机试1-10C++
  • 拥抱云开发的未来:腾讯云数据库、云模板与AI智能化的应用场景探索
  • 大数据新视界 --大数据大厂之区块链技术:为大数据安全保驾护航
  • GEE引擎传奇UI界面修改教程
  • 【C Language】 运算符:按位运算符;逻辑运算符;关系运算符;条件运算符
  • 光伏工程造价单自动生成
  • CEEMDAN +组合预测模型(CNN-Transformer + ARIMA)