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 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~