题解
【入门】郭远摘苹果
1 条题解
-
0
解题思路
题目问郭远一路摘苹果的过程中,身上最多带过多少苹果、最少带过多少,求这两个数的差。
因为郭远每到一棵树就丢掉身上的、换成这棵树的苹果,所以整个过程他身上的苹果数就是每棵树的苹果数。问题就变成:求整个果园苹果数的最大值减最小值。
思路:
- 把 m 行 n 列的苹果数读进二维数组
- 先假设第一个数是最大值也是最小值
- 遍历所有苹果数:遇到更大的更新最大值,遇到更小的更新最小值
- 输出最大值减最小值
这种方法叫打擂台:mx 是最大值擂主,mi 是最小值擂主,每个苹果数都来比一比。
参考代码
#include <iostream> using namespace std; int main() { int a[100][100]; int m, n; cin >> m >> n; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cin >> a[i][j]; } } int mx = a[0][0]; int mi = a[0][0]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (a[i][j] > mx) mx = a[i][j]; if (a[i][j] < mi) mi = a[i][j]; } } cout << mx - mi << endl; return 0; }复杂度分析
- 时间复杂度:O(M×N),遍历整个矩阵
- 空间复杂度:O(M×N),二维数组存苹果数
- 1