链接:
https://leetcode.cn/problems/decrease-elements-to-make-array-zigzag/
题意:
给一个整数数组,每次可以让某个数减一
求让数组变成锯齿数组的最小操作数
锯齿数组:每个奇数位都大于相邻数或每个偶数位都大于相邻数
解:
1k长度,只需要做减法,开暴!
实际代码:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int Nmax=1E3+3;
int solve(vector<int>& nums)
{
int lg=nums.size();
int ans=INT_MAX;
int temp=0;
for(int i=0;i<lg;i+=2)
{
int l=(i-1)>=0?nums[i-1]:1001;
int r=(i+1)<lg?nums[i+1]:1001;
int Min=min(l,r);
//cout<<"Min:"<<Min<<endl;
if(nums[i]<Min) continue;
else
{
temp=temp+(nums[i]-Min+1);
//cout<<temp<<endl;
}
}
ans=min(temp,ans);temp=0;
for(int i=1;i<lg;i+=2)
{
int l=(i-1)>=0?nums[i-1]:1001;
int r=(i+1)<lg?nums[i+1]:1001;
int Min=min(l,r);
//cout<<"Min:"<<Min<<endl;
if(nums[i]<Min) continue;
else
{
temp=temp+(nums[i]-Min+1);
//cout<<temp<<endl;
}
}
ans=min(temp,ans);temp=0;
return ans;
}
int main()
{
int n;cin>>n;
vector<int> nums;
for(int i=1;i<=n;i++)
{
int temp;cin>>temp;
nums.push_back(temp);
}
int ans=solve(nums);
cout<<ans<<endl;
}
限制:
1 <= nums.length <= 1000
1 <= nums[i] <= 1000