แนวคิด
สมมติว่ามีเมทริกซ์ m * n ชื่อ M เริ่มต้นด้วย 0 ทั้งหมด และมีการอัปเดตหลายครั้ง การอัปเดตแทนด้วยอาร์เรย์ 2D แต่ละอาร์เรย์มีสองจำนวนเต็มบวก x และ y หมายถึง M[i][j] ควรเพิ่ม 1 สำหรับทุก i ในช่วง 0 ถึง a-1 และทุก j ในช่วง 0 ถึง b-1 ต้องหาจำนวนของจำนวนเต็มสูงสุดในเมทริกซ์หลังทำทุกการดำเนินการ
เช่น ถ้าอินพุต m = 3, n = 3 และ operations = [[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 |
หลังทำ [3,3]:
| 2 | 2 | 1 |
| 2 | 2 | 1 |
| 1 | 1 | 1 |
วิธีแก้:
- minR := m, minC := n
- สำหรับ op ใน ops array:
- minR := min ของ minR และ op[0]
- minC := min ของ 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