算法学习--前缀和与差分

简介: 算法学习--前缀和与差分


一 前缀和

2615. 等值距离和 - 力扣(LeetCode)


在这个题目当中, 在考虑到使用一个 unordered_map<int, vector<int>> 储存相同数字的下标之后, 问题就变成了: 给定一个有序数组(这道题目当中存入 vector 的是下标, 在插入的时候自然就是有序的, 无需排序), 求这个数组中的一个数与其他所有数的差的绝对值之和, 这一点可以使用前缀和来解决, 用 s[i] 来表示数组 a 中的前 i 个数之和

前缀和中 s[] 的下标要从 1 开始, 如果 a[] 的下标也是从 1 开始的话, 就会配合默契, 但是如果说 a[] 的下标为 0 开始, 那么就用循环 i 依然从 1 开始, 但是用 a[i-1]


class Solution {
public:
    typedef long long LL;
    vector<long long> distance(vector<int>& nums) {
        unordered_map<int, vector<int>> mp;
        int n=nums.size();
        for(int i=0;i<n;i++){
            mp[nums[i]].push_back(i);
        }
        vector<LL> arr(n);
        // 写成匿名函数可以更方便的使用 distance 中的局部变量
        auto get_one=[&](vector<int>&  vec){
            int len_vec=vec.size();
            vector<LL> s(len_vec+1);
            s[0]=0;
            // a 的下标是从 0 开始的
            for(int i=0;i<len_vec;i++){
                s[i+1]=s[i]+vec[i];
            }
            // vec 的下标是从 0 开始的, 但是循环的时候 i 依然从 1 开始, 只是使用 vec[i-1]
            for(int i=1;i<=len_vec;i++){
                LL l=1LL*i*vec[i-1]-s[i];
                LL r=(s[len_vec]-s[i])-1LL*vec[i-1]*(len_vec-i);
                arr[vec[i-1]]=l+r;
            }
        };
        for(auto it:mp){
            get_one(it.second);
        }
        return arr;
    }
};


差分

相关文章
|
4月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
180 0
|
3月前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
269 14
|
3月前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
243 1
|
3月前
|
机器学习/深度学习 边缘计算 分布式计算
基于差分进化算法的微电网调度研究(Matlab代码实现)
基于差分进化算法的微电网调度研究(Matlab代码实现)
160 1
|
6月前
|
机器学习/深度学习 算法
基于差分进化灰狼混合优化的SVM(DE-GWO-SVM)数据预测算法matlab仿真
本项目实现基于差分进化灰狼混合优化的SVM(DE-GWO-SVM)数据预测算法的MATLAB仿真,对比SVM和GWO-SVM性能。算法结合差分进化(DE)与灰狼优化(GWO),优化SVM参数以提升复杂高维数据预测能力。核心流程包括DE生成新种群、GWO更新位置,迭代直至满足终止条件,选出最优参数组合。适用于分类、回归等任务,显著提高模型效率与准确性,运行环境为MATLAB 2022A。
|
9月前
|
算法 数据可视化 开发者
为什么要学习数据结构与算法
今天,我向大家介绍一门非常重要的课程——《数据结构与算法》。这门课不仅是计算机学科的核心,更是每一位开发者从“小白”迈向“高手”的必经之路。
为什么要学习数据结构与算法
|
9月前
|
机器学习/深度学习 算法 机器人
强化学习:时间差分(TD)(SARSA算法和Q-Learning算法)(看不懂算我输专栏)——手把手教你入门强化学习(六)
本文介绍了时间差分法(TD)中的两种经典算法:SARSA和Q-Learning。二者均为无模型强化学习方法,通过与环境交互估算动作价值函数。SARSA是On-Policy算法,采用ε-greedy策略进行动作选择和评估;而Q-Learning为Off-Policy算法,评估时选取下一状态中估值最大的动作。相比动态规划和蒙特卡洛方法,TD算法结合了自举更新与样本更新的优势,实现边行动边学习。文章通过生动的例子解释了两者的差异,并提供了伪代码帮助理解。
719 2
|
11月前
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
2396 11
架构学习:7种负载均衡算法策略
|
12月前
|
算法
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】

热门文章

最新文章