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