《挑战程序设计竞赛2 算法和数据结构》第二章实现

该文章为《挑战程序设计竞赛2 算法和数据结构》第二章的题解笔记,该书主要借助AizuOnlineJudge(以下简称AOJ)上的课程题进行讲解。

ALDS1_1_D Maximum Profit(最大利润)


目录

[ALDS1_1_D Maximum Profit(最大利润)](#ALDS1_1_D Maximum Profit(最大利润))

题目描述(图片内容为机翻)

代码实现

题解笔记

总评

注意点

重点解释


题目描述(图片内容为机翻)

代码实现

java 复制代码
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();
    }
}

题解笔记

总评

题目难度不大,但要求较多,有点绕,需细心思考。

该题重点在于找出局部的最大值和最小值,按照题目要求最大的价格差即极大值-极小值(不一定为最大值-最小值),需要从局部观察,不能直接按整体找。

注意点
  • 输出有顺序要求的价格差的最大值,需要后面的数减去前面的数。顺序很重要,不是单纯找出整个数列的最大值、最小值作差。
  • 注意递减的情况,找最大值和最小值时候要注意端点,最大值不能为第一个数,最小值不能为最后一个数。
  • 该题要有局部观,不能从整体来看,不要直接从前往后找出最小值后再找出该值后面的最大值,或从后往前先找出最大值后再找该值前面的最小值,要算出每个局部价格差的最大值。
重点解释

从前往后,找出局部的最大价格差,并且更新截止当前的最小值,即找到当前的极小值点,计算出价格差(aj-min)后,与之前的最大价格差比较(max_x),最后更新最大价格差。

相关推荐
goyeer几秒前
Liunx日志管理与journalctl
java·linux·运维·服务器·运维开发·信息化·信息化企业管理
tianyu2341 小时前
Java 正则表达式终极指南:从 Pattern 到 Matcher,从双重转义到性能优化,一篇全搞定
java·开发语言·正则表达式·group·find·pattern·matcher
Emily156853598703 小时前
Emerson 1C31129G03 Analog Input Module
java·开发语言·前端·plc·emerson·1c31129g03·input module
就叫_这个吧8 小时前
Java递归方法实现面包屑导航
java·开发语言
小O的算法实验室8 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
fīɡЙtīиɡ ℡8 小时前
AI 应用系统设计
java·开发语言·人工智能
小飞学编程...8 小时前
【哈希表】
数据结构·哈希算法·散列表
城管不管8 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅8 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
AI绘画哇哒哒9 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent