top1编程
← 返回题目
题解

删除最小值

1 条题解

  • 0
    @ 2026-8-5 12:14:56

    解题思路

    题目在说什么?

    有 n 个互不相同的整数。我们要找出最小的那个整数,把它从数组里删掉,然后输出剩下所有数。

    第一步:找出最小值的位置

    用“打擂台”的方法:mn 记录目前找到的最小值,p 记录它的位置(下标)。

    读入每个数时,如果它比现在的 mn 还小,就更新 mn 和 p。因为题目保证数字不重复,所以最小值只有一个,位置 p 也是唯一的。

    第二步:跳过最小值输出

    “删除”其实不用真的把数组搬来搬去。我们只要在输出时,跳过下标为 p 的那个数,把其他所有数按原来的顺序输出,就等价于“删掉最小值”了。

    验证样例: 10 个数 99 80 44 78 86 82 96 60 73 58,最小的是 44(下标 2)。输出时跳过它,得到 99 80 78 86 82 96 60 73 58,和输出一致。

    参考代码

    // P4504 删除最小值:找到最小值并跳过它输出其余数
    #include <iostream>
    using namespace std;
    int main() {
        int n, a[1005];
        cin >> n;
        int mn = 2000000000, p = 0;
        for (int i = 0; i < n; i++) {
            cin >> a[i];
            if (a[i] < mn) { mn = a[i]; p = i; } // 记录最小值及其位置
        }
        for (int i = 0; i < n; i++)
            if (i != p) cout << a[i] << " ";     // 跳过最小值不输出
        cout << endl;
        return 0;
    }
    

    复杂度分析

    设有 n 个整数。

    • 时间:找最小值要循环 n 次,输出也要循环 n 次,时间复杂度是 O(n);
    • 空间:需要一个能装 n 个整数的数组,空间复杂度是 O(n)。
    • 1