题解:洛谷 P5718 找最小值

【题目来源】

洛谷:P5718 【深基4.例2】找最小值 - 洛谷

【题目描述】

给出 \(n\)\(n\) 个整数 \(a_i\),求这 \(n\) 个整数中最小值是什么。

【输入】

第一行输入一个正整数 \(n\),表示数字个数。

第二行输入 \(n\)个非负整数,表示 \(a_1,a_2,\dots,a_n\),以空格隔开。

【输出】

输出一个非负整数,表示这 \(n\) 个非负整数中的最小值。

【输入样例】

8
1 9 2 6 0 8 1 7

【输出样例】

0

【核心思想】

  1. 问题分析:给定 \(n\) 个非负整数,求其中的最小值。这是一个基础的线性扫描问题。

  2. 算法选择

    • 顺序比较:遍历数组,维护当前最小值,遇到更小的数则更新
  3. 关键步骤

    • 读入数据cin >> n 读取数字个数,循环读入 \(n\) 个数到数组 \(a[1..n]\)
    • 初始化最小值min = a[1],假设第一个数为最小值
    • 线性扫描\(i\)\(2\)\(n\)):
      • min > a[i],则 min = a[i](更新最小值)
    • 输出结果cout << min
  4. 时间/空间复杂度

    • 时间复杂度:\(O(n)\),需要遍历所有 \(n\) 个数一次
    • 空间复杂度:\(O(n)\),存储 \(n\) 个数的数组(可优化至 \(O(1)\) 边读边比较)
  5. 线性扫描的核心思想

    • 假设-验证-更新:先假设第一个元素为最小值,然后逐一验证后续元素,发现更小值立即更新
    • 遍历完备性:必须检查每个元素,任何一个遗漏都可能导致错误结果
    • 空间可优化:最小值问题无需存储所有数,可边读入边比较,将空间降至 \(O(1)\)
    • 适用于最值查找、线性遍历、基准比较类入门问题

【算法标签】

入门 #模拟

【代码详解】

#include <bits/stdc++.h>  // 包含标准库头文件(万能头文件)
using namespace std;      // 使用标准命名空间

/**
 * 主函数 - 程序入口
 * @return 程序执行状态码(0表示成功)
 */
int main()
{
    int n;               // 定义变量:数字个数n
    int min;             // 定义变量:最小值
    int a[10000];        // 定义数组:存储输入的数字

    cin >> n;            // 输入数字个数

    // 输入n个数字到数组
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }

    min = a[1];          // 初始化最小值为第一个元素

    // 遍历数组查找最小值
    for (int i = 2; i <= n; i++)
    {
        if (min > a[i])  // 如果当前元素比最小值小
        {
            min = a[i];  // 更新最小值
        }
    }

    cout << min;         // 输出最小值

    return 0;            // 程序正常结束
}

【运行结果】

8
1 9 2 6 0 8 1 7
0
posted @ 2026-08-05 15:47  团爸讲算法  阅读(21)  评论(0)    收藏  举报