package com.fishercoder.solutions;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 1341. The K Weakest Rows in a Matrix
 *
 * 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.
 * */
public class _1341 {
    public static class Solution1 {
        public int[] kWeakestRows(int[][] mat, int k) {
            List<int[]> list = new ArrayList<>();
            for (int i = 0; i < mat.length; i++) {
                int soldiers = 0;
                for (int j = 0; j < mat[0].length; j++) {
                    if (mat[i][j] == 1) {
                        soldiers++;
                    } else {
                        break;
                    }
                }
                list.add(new int[]{i, soldiers});
            }
            Collections.sort(list, (a, b) -> a[1] == b[1] ? a[0] - b[0] : a[1] - b[1]);
            int[] result = new int[k];
            int i = 0;
            while (i < k) {
                result[i] = list.get(i++)[0];
            }
            return result;
        }
    }
}

@@ -115,1317 +115,8 @@
 t;%0A%0A
-/**%0A * 1341. The K Weakest Rows in a Matrix%0A *%0A * Given a m * n matrix mat of ones (representing soldiers) and zeros (representing civilians),%0A * return the indexes of the k weakest rows in the matrix ordered from the weakest to the strongest.%0A * 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,%0A * or they have the same number of soldiers but i is less than j. Soldiers are always stand in the frontier of a row,%0A * that is, always ones may appear first and then zeros.%0A *%0A * Example 1:%0A * Input: mat =%0A * %5B%5B1,1,0,0,0%5D,%0A *  %5B1,1,1,1,0%5D,%0A *  %5B1,0,0,0,0%5D,%0A *  %5B1,1,0,0,0%5D,%0A *  %5B1,1,1,1,1%5D%5D,%0A * k = 3%0A * Output: %5B2,0,3%5D%0A * Explanation:%0A * The number of soldiers for each row is:%0A * row 0 -%3E 2%0A * row 1 -%3E 4%0A * row 2 -%3E 1%0A * row 3 -%3E 2%0A * row 4 -%3E 5%0A * Rows ordered from the weakest to the strongest are %5B2,0,3,1,4%5D%0A *%0A * Example 2:%0A * Input: mat =%0A * %5B%5B1,0,0,0%5D,%0A *  %5B1,1,1,1%5D,%0A *  %5B1,0,0,0%5D,%0A *  %5B1,0,0,0%5D%5D,%0A * k = 2%0A * Output: %5B0,2%5D%0A * Explanation:%0A * The number of soldiers for each row is:%0A * row 0 -%3E 1%0A * row 1 -%3E 4%0A * row 2 -%3E 1%0A * row 3 -%3E 1%0A * Rows ordered from the weakest to the strongest are %5B0,2,3,1%5D%0A *%0A * Constraints:%0A * m == mat.length%0A * n == mat%5Bi%5D.length%0A * 2 %3C= n, m %3C= 100%0A * 1 %3C= k %3C= m%0A * matrix%5Bi%5D%5Bj%5D is either 0 or 1.%0A * */%0A
 publ

refactor 1341