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]
class Solution {
    public int[] kWeakestRows(int[][] mat, int k) {
        int[] ans = new int[k];
		int[][] res = new int[mat.length][2];
		int[] values = new int[mat.length];
		for(int i=0;i<mat.length;i++){
			for(int j=0;j<mat[i].length;j++){
				values[i] += mat[i][j];
			}
			res[i][0] = i;
			res[i][1] = values[i];
		}
		res = sort(res);
		res = sort2(res);
		for(int i=0;i<k;i++){
			ans[i] = res[i][0];
		}
		return ans;
    }
    public void swap(int[] a, int[] b){
		int temp = 0;
		for(int j=0;j<a.length;j++) {
			temp=a[j];
			a[j]=b[j];
			b[j]=temp;
		}			
	}
	public int[][] sort(int[][] arr){
		for(int i=0;i<arr.length-1;i++){
			for(int j=0;j<arr.length-1-i;j++){
				if(arr[j][1]>arr[j+1][1]){
					swap(arr[j],arr[j+1]);
				}
			}
		}
		return arr;
	}
	public int[][] sort2(int[][] arr){
		for(int i=0;i<arr.length-1;i++){
			for(int j=0;j<arr.length-1-i;j++){
				if(arr[j][1]==arr[j+1][1] && arr[j][0]>arr[j+1][0]){
					swap(arr[j],arr[j+1]);
				}
			}
		}
		return arr;
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章