样例输入#
2 4 1 2 3 4 4 3 2 4 1
样例输出#
3 5
解题思路:最小操作次数一定是把所有数变成数组中最大值max。
1、找最大值,一开始我把max初始值设为0,如果a[i]>max,max=a[i],WA了。又看了一遍题目,发现所有整数的绝对值小于10的9次方。那如果数组都是负数,最大值是0岂不是出问题了。
解决方法:把max初始值设为a[0]
最大值初始化不要忘记要考虑为负数的情况。
2、把原数组的数变为与max相差值的数。比如 1 2 3 4。最大值为4,新的数组为3 2 1 0
3、a[n]=0,如果a[i]>a[i+1],ans+=a[i]-a[i+1]。找规律即可,注意数组最后一位设为0,i<n。
#include<stdio.h>
int a[10005]={};
int main(){
int T;
scanf("%d",&T);
while(T--){
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
//找出数列最大值
int max=a[0];
for(i=0;i<n;i++){
if(a[i]>=max)max=a[i];
}
for(i=0;i<n;i++) {
a[i]=max-a[i];
}
a[n]=0;
long long cnt=0;
for(i=0;i<n;i++){
if(a[i]>a[i+1])cnt+=a[i]-a[i+1];
}
printf("%lld\n",cnt);
}
}