马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
该文章为《寻衅步伐筹划比赛2 算法和数据布局》第二章的题解条记,该书告急借助AizuOnlineJudge(以下简称AOJ)上的课程题举行解说。
ALDS1_1_D Maximum Profit(最大利润)
目次
ALDS1_1_D Maximum Profit(最大利润)
标题形貌(图片内容为机翻)
代码实现
题解条记
总评
注意点
重点表明
标题形貌(图片内容为机翻)
代码实现
- import java.util.Scanner;
- public class Main {
- public static void main(String[] args) {
- int max, min, max_x;
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int a[] = new int[n];
- for (int i = 0; i < n; i++) {
- a[i] = sc.nextInt();
- }
- max = a[n - 1];
- min = a[0];
- max_x = max - min;
- for (int j = 1; j < n; j++) {
- max_x = Math.max(a[j] - min, max_x);
- min = Math.min(min, a[j]);
- }
- System.out.println(max_x);
- sc.close();
- }
- }
复制代码 题解条记
总评
标题难度不大,但要求较多,有点绕,需细致思索。
该题重点在于找出局部的最大值和最小值,按照标题要求最大的代价差即极大值-极小值(不肯定为最大值-最小值),必要从局部观察,不能直接按团体找。
注意点
- 输出有次序要求的代价差的最大值,必要反面的数减去前面的数。次序很告急,不是单纯找出整个数列的最大值、最小值作差。
- 注意递减的环境,找最大值和最小值时间要注意端点,最大值不能为第一个数,最小值不能为末了一个数。
- 该题要有局部观,不能从团体来看,不要直接从前以后找出最小值后再找出该值反面的最大值,或从后往前先找出最大值后再找该值前面的最小值,要算出每个局部代价差的最大值。
重点表明
从前以后,找出局部的最大代价差,而且更新停止当前的最小值,即找到当前的极小值点,盘算出代价差(a[j]-min)后,与之前的最大代价差比力(max_x),末了更新最大代价差。
|