3224. 使差值相等的最少数组改动次数

原题链接

前情提要,结合原题解区的题解

题解

先简化问题,对于一对数 a,b,其中 ab,要使其差为 X 的操作数是多少?

分类讨论

1.如果 ba==X,操作数为 0(不操作)

2.如果 X<ba,操作数为 1(增加a或者减小b)

3.如果 X[ba+1,ka],操作数为 1(增大b)

4.如果 X[ba+1,b],操作数为 1(减小a)

5.否则操作数为 2(增加b,同时减小a)

实现

对于 X[0,ba)[ba+1,max(ka,b)] 的区间操作数为 1

对于 X[ba,ba] 的区间,操作数为 0

对于 X(max(ka,b),k] 的区间,操作数为 2

相当于区间修改,单点查询(一次),因此可以用差分数组解决

code

class Solution {
public:
    int minChanges(vector<int>& nums, int k) {
        int n=nums.size();
        vector<int> d(k+3,0);
        for(int i=0;2*i<n;i++)
        {
            int a=min(nums[i],nums[n-i-1]);
            int b=max(nums[i],nums[n-i-1]);
            int m1=b-a;
            int m2=max(k-a,b);
            d[0]++;
            d[m1]--;

            d[m1+1]++;
            d[m2+1]--;

            d[m2+1]+=2;
            d[k+1]-=2;
        }

        int ans=d[0];
        for(int i=1;i<=k;i++) 
        {
            d[i]+=d[i-1];
            ans=min(ans,d[i]);
        }
        return ans;
    }
};
posted @   纯粹的  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示