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

การเพิ่มช่วง II ใน C++


สมมติว่าเรามีเมทริกซ์ m * n หนึ่งชื่อเรียกว่า M และสิ่งนี้ถูกเริ่มต้นด้วย 0 ทั้งหมด และเรายังมีการดำเนินการอัปเดตหลายอย่าง ตอนนี้ การดำเนินการถูกแสดงโดยอาร์เรย์ 2 มิติ และการดำเนินการแต่ละครั้งจะแสดงด้วยอาร์เรย์ที่มีจำนวนเต็มบวกสองจำนวน x และ y หมายความว่า ควรเพิ่ม M[i][j] หนึ่งรายการสำหรับค่าทั้งหมด i ในช่วง 0 ถึง a - 1 และค่า j ทั้งหมดในช่วง 0 ถึง b - 1 เราต้องหาการนับจำนวนเต็มสูงสุดในเมทริกซ์หลังจากดำเนินการทั้งหมด

ดังนั้น หากอินพุตเป็น m =3, n =3 และ operation =[[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 ใน ops array

    • 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