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 = 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}

沒有留言:

張貼留言

About

努力在程式的大海
用力的揮動雙手
找出屬於自己的航線

Blog Archive

Traffic