Cho ma trận 2D, tìm tổng lớn nhất k phần tử từ ma trận 2D
- Số lượng phần tử được lấy từ hàng không vượt quá limit[i]
Input : grid = [[1,2],[3,4]], limits = [1,2], k = 2
Ouput : 7
Giải thích :
- Từ hàng thứ hai, ta có thể lấy nhiều nhất 2 phần tử. Các phần tử lấy được là 4 và 3.
- Tổng lớn nhất có thể của tối đa 2 phần tử được chọn là 4 + 3 = 7.
🔹 Bài này ta sẽ sử dụng Priority_queue và sorting
Quy trình thực hiện:
- 🟢 Bước 1: tại mỗi hàng ta sẽ sort và lấy ra limit[i] phần tử lớn nhất, cho vào priority_queue
- 🟡 Bước 2: duyệt vòng for để lấy ra k giá trị lớn nhất từ priority_queue
class Solution {
public:
long long maxSum(vector<vector<int>>& grid, vector<int>& limits, int k) {
if(k == 0) return 0;
long long total = 0, n = grid.size(), m = grid[0].size(), lid = 0;
priority_queue<int>pq;
for(int i = 0; i < n; i++) {
sort(grid[i].rbegin(), grid[i].rend());
for(int j = 0; j < min((int)grid[i].size(), limits[i]); j++) {
pq.push(grid[i][j]);
}
}
for(int i = 0; i < k; i++) {
total = total + pq.top();
pq.pop();
}
// cout << total << endl;
return total;
}
};