題目:
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 = 3Output: [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}
沒有留言:
張貼留言