【深基4.习5】求极差 / 最大跨度值 / 最大值和最小值的差

GitHub跳转原题关系图返回列表

读入整数列表后分别求最大值和最小值,两者相减得到极差。

OJ: luogu

题目 ID: P5724

难度:入门

标签:模拟列表python

日期: 2026-07-15 18:35

题意

给出 n 个整数,求这一组数的极差,也就是:

text
最大值 - 最小值

思路

Python 的列表可以直接配合 maxmin 使用。

读入第二行的所有整数后:

text
answer = max(numbers) - min(numbers)

就得到极差。

如果用手写循环,也是在扫描过程中维护当前最大值和最小值。本题数据范围很小,使用内置函数更适合教学:代码短,含义也和题意完全一致。

这题是列表与内置函数练习,brute.py 会重复同一件事,因此不创建额外暴力文件。

Python 知识

  • /home/rainboy/mycode/hugo-blog/content/program_language/python/input_output_and_strings.md:用 list(map(int, input().split())) 读取一行整数数组。
  • /home/rainboy/mycode/hugo-blog/content/program_language/python/oj_input_output_cheatsheet.md:本题是“第一行 n,第二行数组”的标准输入格式。
  • max(numbers) 返回列表最大值。
  • min(numbers) 返回列表最小值。

代码

python
n = int(input())
numbers = list(map(int, input().split()))

answer = max(numbers) - min(numbers)

print(answer)
cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-07-27 00:00
 * update_at: 2026-07-27 00:00
 */

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n; // 整数的个数
    cin >> n;
    int a[1005]; // 存储 n 个整数
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    // 扫描数组同时找最大值和最小值
    int max_val = a[0], min_val = a[0];
    for (int i = 1; i < n; i++) {
        if (a[i] > max_val) max_val = a[i];
        if (a[i] < min_val) min_val = a[i];
    }
    // 极差 = 最大值 - 最小值
    cout << max_val - min_val << endl;
    return 0;
}

Pythonic 写法

max-min:

python
input()
a = list(map(int, input().split()))
print(max(a) - min(a))

复杂度

maxmin 都会扫描一遍列表,时间复杂度是 O(n)O(n);存储输入列表需要 O(n)O(n) 空间。

总结

极差就是最大值减最小值。Python 的 maxmin 能直接表达这个定义,适合入门题中优先掌握。