• 1337. The K Weakest Rows in a Matrix (E)


    The K Weakest Rows in a Matrix (E)

    题目

    Given a m * n matrix mat of ones (representing soldiers) and zeros (representing civilians), return the indexes of the k weakest rows in the matrix ordered from the weakest to the strongest.

    A row i is weaker than row j, if the number of soldiers in row i is less than the number of soldiers in row j, or they have the same number of soldiers but i is less than j. Soldiers are always stand in the frontier of a row, that is, always ones may appear first and then zeros.

    Example 1:

    Input: 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
    Output: [2,0,3]
    Explanation: 
    The number of soldiers for each row is: 
    row 0 -> 2 
    row 1 -> 4 
    row 2 -> 1 
    row 3 -> 2 
    row 4 -> 5 
    Rows ordered from the weakest to the strongest are [2,0,3,1,4]
    

    Example 2:

    Input: mat = 
    [[1,0,0,0],
     [1,1,1,1],
     [1,0,0,0],
     [1,0,0,0]], 
    k = 2
    Output: [0,2]
    Explanation: 
    The number of soldiers for each row is: 
    row 0 -> 1 
    row 1 -> 4 
    row 2 -> 1 
    row 3 -> 1 
    Rows ordered from the weakest to the strongest are [0,2,3,1]
    

    Constraints:

    • m == mat.length
    • n == mat[i].length
    • 2 <= n, m <= 100
    • 1 <= k <= m
    • matrix[i][j] is either 0 or 1.

    题意

    给定一个二维数组,将其按照每个一维数组中1的个数从小到大排序,取前K个。

    思路

    直接建堆排序处理。


    代码实现

    Java

    class Solution {
        public int[] kWeakestRows(int[][] mat, int k) {
            Queue<int[]> heap = new PriorityQueue<>(k, (a, b) -> a[1] - b[1] != 0 ? a[1] - b[1] : a[0] - b[0]);
            for (int i = 0; i < mat.length; i++) {
                int cnt = 0;
                for (int j = 0; j < mat[i].length; j++) {
                    if (mat[i][j] == 1) cnt++;
                }
                heap.offer(new int[]{i, cnt});
            }
            int[] ans = new int[k];
            for (int i = 0; i < k; i++) {
                ans[i] = heap.poll()[0];
            }
            return ans;
        }
    }
    
  • 相关阅读:
    Java设计模式——单例模式
    Java设计模式——工厂模式
    多线程
    Collection集合
    内部类
    多态
    接口
    面向对象(2)
    数组
    面向对象(1)
  • 原文地址:https://www.cnblogs.com/mapoos/p/14404290.html
Copyright © 2020-2023  润新知