C/C++教程

Leetcode 1685. 有序数组中差绝对值之和(DAY 120) ---- 贪心算法学习期

本文主要是介绍Leetcode 1685. 有序数组中差绝对值之和(DAY 120) ---- 贪心算法学习期,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

      • 原题题目
      • 代码实现(首刷自解复杂度较高)
      • 代码实现(首刷自解优化)


原题题目


在这里插入图片描述


代码实现(首刷自解复杂度较高)


class Solution {
public:
    vector<int> getSumAbsoluteDifferences(vector<int>& nums) {
        int size = nums.size(),lowertimes = size,lower = 0,highertimes = 0 ;
        vector<int> ret;
        unordered_map<int,int> map;
        for(const auto& num:nums)
        {
            lower += num;
            ++map[num];
        }   

        for(int i=0;i<size;++i)
        {
            if(i && nums[i] > nums[i-1])
            {
                lowertimes -= 2*map[nums[i-1]];
                lower -= 2*nums[i-1]*map[nums[i-1]];
            }
            int temp = lower - (lowertimes)*nums[i];
            ret.emplace_back(temp);
        }
        return ret;
    }
};

代码实现(首刷自解优化)


class Solution {
public:
    vector<int> getSumAbsoluteDifferences(vector<int>& nums) {
        int size = nums.size(),times = size-1;
        vector<int> ret,l(nums.size()),r(l);
        for(int i=0,temp=0;i<nums.size();)   l[i++] = (temp += nums[i]);
        for(int i=nums.size()-1,temp=0;i>=0;)   r[i--] = (temp += nums[i]);
        
        for(int i=0,temp=1;i<nums.size();++i,times-=2)
        {
            int num = r[i]-l[i]-(times)*nums[i];
            ret.emplace_back(num);
        }
        return ret;
    }
};
这篇关于Leetcode 1685. 有序数组中差绝对值之和(DAY 120) ---- 贪心算法学习期的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!