leetcode1337. 方阵中战斗力最弱的 K 行(优先队列)
生活随笔
收集整理的這篇文章主要介紹了
leetcode1337. 方阵中战斗力最弱的 K 行(优先队列)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
給你一個大小為 m * n 的方陣 mat,方陣由若干軍人和平民組成,分別用 1 和 0 表示。
請你返回方陣中戰(zhàn)斗力最弱的 k 行的索引,按從最弱到最強排序。
如果第 i 行的軍人數(shù)量少于第 j 行,或者兩行軍人數(shù)量相同但 i 小于 j,那么我們認為第 i 行的戰(zhàn)斗力比第 j 行弱。
軍人 總是 排在一行中的靠前位置,也就是說 1 總是出現(xiàn)在 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]
解釋:
每行中的軍人數(shù)目:
行 0 -> 2
行 1 -> 4
行 2 -> 1
行 3 -> 2
行 4 -> 5
從最弱到最強對這些行排序后得到 [2,0,3,1,4]
代碼
class Solution {public int[] kWeakestRows(int[][] mat, int k) {int i=0;PriorityQueue<int[]> priorityQueue=new PriorityQueue<>((o1, o2) -> o1[0]==o2[0]?o1[1]-o2[1]:o1[0]-o2[0]);//排序規(guī)則for(int[] c:mat){int ans=0;for(int d:c) if(d==0) break; else ans++;//統(tǒng)計士兵個數(shù)priorityQueue.offer(new int[]{ans,i});i++;}int[] res=new int[k];for(int j=0;j<k;j++) res[j]=priorityQueue.poll()[1];//選出戰(zhàn)力最低的前n名return res;} }總結(jié)
以上是生活随笔為你收集整理的leetcode1337. 方阵中战斗力最弱的 K 行(优先队列)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode剑指 Offer 53
- 下一篇: leetcode744. 寻找比目标字母