题解
最大值
1 条题解
-
0
解题思路
题目要求在一个 m×n 的方阵里找到最大的数,并且输出它所在的行号和列号。
1. 怎么找最大值?
用“打擂台”的方法:先让第 1 个数当“擂主”,然后从第 2 个数开始,一个一个和擂主比。谁大,谁就当新的擂主。全部比完,最后的擂主就是最大值。
2. 还要记住位置
在更新最大值的时候,同时把这一格的行号和列号记下来。这样最后既知道最大值,又知道它在哪里。
3. 初值设多少?
擂主一开始可以设成 -1(题目保证所有数都是正整数,最大是 1000),所以第一次比较一定会更新。
4. 输出顺序
第一行输出最大值,第二行输出“行号 列号”,中间用空格隔开。
5. 对照样例
样例里最大的数是 360,它位于第 3 行第 2 列,所以输出:
360 3 2参考代码
#include <iostream> using namespace std; int main(){ // P4525 最大值:边读边找最大的数,并记下它所在的行和列 int m, n; cin >> m >> n; int mx = -1, r = 1, c = 1; // mx保存最大值,r、c保存行号和列号 for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ int x; cin >> x; if(x > mx){ // 发现更大的数就更新 mx = x; r = i; c = j; } } } cout << mx << endl; // 第一行:最大值 cout << r << " " << c << endl; // 第二行:行号 列号 return 0; }复杂度分析
我们要把方阵里所有的数都读一遍并比较,一共有 m×n 个数,所以时间复杂度是 O(m×n)。题目说 3 ≤ m,n ≤ 100,最多 100×100=10000 个数,很快。
程序只用了几个变量存最大值和它的位置,没有开数组,空间复杂度是 O(1)。
- 1