3224. 使差值相等的最少数组改动次数
前情提要,结合原题解区的题解
题解
先简化问题,对于一对数
分类讨论
1.如果
2.如果
3.如果
4.如果
5.否则操作数为
实现
对于
对于
对于
相当于区间修改,单点查询(一次),因此可以用差分数组解决
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;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具