题解
最小的元素
1 条题解
-
0
解题思路
题目要我们输出每一行的最小值,一行一个。
1. 一行一行处理
读入方阵的时候,不需要把整个方阵都存下来,可以读一行、找一行、输出一行。这样更省内存,思路也更清楚。
2. 怎么找一行里的最小值?
和“打擂台”一样:先把这一行的最小值设成一个很大的数(比如 1001,因为题目说数字不大于 1000),然后这一行的每个数都来和它比,谁小谁当擂主。这一行读完,擂主就是这一行的最小值。
3. 对照样例
第 1 行是 9 10 5 100,最小是 5;第 2 行是 10 200 7 7,最小是 7;第 3 行是 12 360 89 11,最小是 11。所以输出:
5 7 11参考代码
#include <iostream> using namespace std; int main(){ // P4527 最小的元素:一行一行的读,找每一行的最小值并输出 int m, n; cin >> m >> n; for(int i=1;i<=m;i++){ int mn = 1001; // 数字不大于1000,初值设一个足够大的数 for(int j=1;j<=n;j++){ int x; cin >> x; if(x < mn) mn = x; // 更新这一行的最小值 } cout << mn << endl; // 输出这一行的最小值 } return 0; }复杂度分析
方阵一共有 m 行、每行 n 个数,也就是 m×n 个数。每个数被读进来并比较一次,所以时间复杂度是 O(m×n)。题目说数字不大于 1000,规模不大,很快就能算完。
程序没有开数组,只用了几个变量,空间复杂度是 O(1)。
- 1