【CCF-CSP】 201609-1 最大波动


一、题目

在这里插入图片描述

原题目链接

二、解题

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.优化

这段代码可以优化如下:

  1. 不需要数组存储所有输入的数,只需要记录前一个输入的数就可以。
  2. 不需要将每个输入的数都计算一遍与前一个数之间的差值,只需要在输入每个新的数后,直接计算该数与前一个数之间的差值,并与当前最大差值进行比较即可。

优化后的代码如下所示:

#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;
}

这个优化方案可以减少数组的空间使用,并且减少了一部分计算的时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值