一、题目
二、解题
1.题目
读入一个长度为n的整数序列a,计算序列a中相邻两个数之间的差的绝对值的最大值,最后输出这个最大值。具体的操作方法是先读入n,然后依次读入序列a的每一个元素,计算当前元素和前一个元素的差的绝对值,如果这个差的绝对值大于当前已经计算出的差的最大值,就更新最大值,最后输出最大值即可。
2.代码
dev c++ 5.11
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
int a[1010];
int main(){
int n;
cin>>n;
int ans=0;
for(int i=0;i<n;i++){
cin>>a[i];
if(i&&abs(a[i-1]-a[i])>ans){
ans=abs(a[i-1]-a[i]);
}
}
cout<<ans<<endl;
return 0;
}
3.提交结果
总结
1.优化
这段代码可以优化如下:
- 不需要数组存储所有输入的数,只需要记录前一个输入的数就可以。
- 不需要将每个输入的数都计算一遍与前一个数之间的差值,只需要在输入每个新的数后,直接计算该数与前一个数之间的差值,并与当前最大差值进行比较即可。
优化后的代码如下所示:
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int n;
cin >> n;
int a, pre = 0, ans = 0;
for(int i = 0; i < n; i++){
cin >> a;
if(i && abs(pre - a) > ans){
ans = abs(pre - a);
}
pre = a;
}
cout << ans << endl;
return 0;
}
这个优化方案可以减少数组的空间使用,并且减少了一部分计算的时间。