M이라는 하나의 m * n 행렬이 있고 이 행렬은 모두 0으로 초기화되고 몇 가지 업데이트 작업도 있다고 가정합니다. 이제 연산은 2D 배열로 표시되고 각 연산은 두 개의 양의 정수 x와 y가 있는 배열로 표시됩니다. 즉, M[i][j]는 범위 0에서 a -의 모든 값 i에 대해 1을 더해야 합니다. 1 및 0에서 b - 1 범위의 모든 값 j. 모든 연산을 수행한 후 행렬에서 최대 정수의 개수를 찾아야 합니다.
따라서 입력이 m =3, n =3 및 연산 =[[2,2],[3,3]]인 경우 출력은 4,
처음에 행렬은 다음과 같습니다.
0 | 0 | 0 |
0 | 0 | 0 |
0 | 0 | 0 |
[2,2]를 수행한 후
1 | 1 | 0 |
1 | 1 | 0 |
0 | 0 | 0 |
[2,2]를 수행한 후
2 | 2 | 1 |
2 | 2 | 1 |
1 | 1 | 1 |
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
minR :=m, minC :=n
-
op 배열의 op를 위해
-
minR :=minR 및 op[0]
의 최소값 -
minC :=minC 및 op[1]의 최소값
-
-
minR * minC 반환
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; class Solution { public: int maxCount(int m, int n, const vector<vector<int>>& ops) { int minR = m; int minC = n; for (const auto& op : ops){ minR = min(minR, op[0]); minC = min(minC, op[1]); } return minR * minC; } }; main(){ Solution ob; vector<vector<int>> v = {{2,2},{3,3}}; cout << (ob.maxCount(3,3,v)); }
입력
3,3,{{2,2},{3,3}}
출력
4