Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Range Addition II ใน C++

แนวคิด

สมมติว่ามีเมทริกซ์ 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

เมทริกซ์เริ่มต้น:

000
000
000

หลังทำ [2,2]:

110
110
000

หลังทำ [3,3]:

221
221
111

วิธีแก้:

  • 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