题解
删除最小值
1 条题解
-
0
解题思路
题目在说什么?
有 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