LeetCode 1337. 方阵中战斗力最弱的 K 行(优先队列)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1337. 方阵中战斗力最弱的 K 行(优先队列)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
給你一個大小為 m * n 的方陣 mat,方陣由若干軍人和平民組成,分別用 0 和 1 表示。
請你返回方陣中戰斗力最弱的 k 行的索引,按從最弱到最強排序。
如果第 i 行的軍人數量少于第 j 行,或者兩行軍人數量相同但 i 小于 j,那么我們認為第 i 行的戰斗力比第 j 行弱。
軍人 總是 排在一行中的靠前位置,也就是說 1 總是出現在 0 之前。
示例 1: 輸入:mat = [[1,1,0,0,0],[1,1,1,1,0],[1,0,0,0,0],[1,1,0,0,0],[1,1,1,1,1]], k = 3 輸出:[2,0,3] 解釋: 每行中的軍人數目: 行 0 -> 2 行 1 -> 4 行 2 -> 1 行 3 -> 2 行 4 -> 5 從最弱到最強對這些行排序后得到 [2,0,3,1,4]示例 2: 輸入:mat = [[1,0,0,0],[1,1,1,1],[1,0,0,0],[1,0,0,0]], k = 2 輸出:[0,2] 解釋: 每行中的軍人數目: 行 0 -> 1 行 1 -> 4 行 2 -> 1 行 3 -> 1 從最弱到最強對這些行排序后得到 [0,2,3,1]提示: m == mat.length n == mat[i].length 2 <= n, m <= 100 1 <= k <= m matrix[i][j] 不是 0 就是 1來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/the-k-weakest-rows-in-a-matrix
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 優先隊列解題
class Solution { public:vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {int i, j, count;priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> q;//按pair的first排序,相同則按second,greater是從小到大for(i = 0; i < mat.size(); i++){count = 0;for(j = 0; j < mat[i].size(); j++){if(mat[i][j])count++;}q.push({count, i});//先按軍人數,再按序號}vector<int> ans;while(k--){ans.push_back(q.top().second);q.pop();}return ans;} };總結
以上是生活随笔為你收集整理的LeetCode 1337. 方阵中战斗力最弱的 K 行(优先队列)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1260. 二维网格迁
- 下一篇: LintCode 183. 木材加工(二