LeetCode:1337. 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]

解釋:
在mat的2維陣列中,算出每一個row當中,1的數量。
利用1的數量進行排序,並回傳前k名。

解法:
在算出1的數量之後
進行泡泡排序法並回傳

func kWeakestRows(mat [][]int, k int) []int {
    sortArr := make([][]int, 0)
    for index, arr := range mat {
		result := 0
		for _, number := range arr {
			if number == 1 {
				result++
			} else {
				break
			}
		}
		sortArr = append(sortArr, []int{index, result})
	}
    
    for i := 0; i < len(mat)-1; i++ {
		for j := 0; j < len(mat)-1-i; j++ {
			if sortArr[j+1][1] < sortArr[j][1] {
				sortArr[j+1], sortArr[j] = sortArr[j], sortArr[j+1]
			}
		}
	}
    
    returnArr := make([]int, 0)
    for i:=0; i < k; i++{
        returnArr = append(returnArr, sortArr[i][0])
    }
    return returnArr
}
Next PostRead more articles

發佈留言