Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 범위 추가 II


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