2 回答

TA貢獻1831條經驗 獲得超4個贊
要獲得最小的非零元素,您不需要對其進行排序。與僅獲取最小的非零元素相比,對數組或切片進行排序是一項相對昂貴的操作。
通常要獲得最小的非零元素,只需遍歷這些值,然后尋找最適合您的值。如果您找到更好的(在您的示例中為較小的非零),請保留并繼續。
示例實現:
func smallestNonZero(s []int) (n int) {
for _, v := range s {
if v != 0 && (v < n || n == 0) {
n = v
}
}
return
}
注意:0當且僅當傳遞的切片不包含任何非零元素(即,它要么充滿0s ,要么為空,要么為 )時,該函數才會返回nil。如果切片(也)包含負數,此函數也能正常工作。
如果您有一個數組而不是一個切片,只需將數組切片(這會產生一個切片),這樣您就可以將其傳遞給上面的函數。
使用它:
fmt.Println(smallestNonZero([]int{5, 3, 1, 4}))
fmt.Println(smallestNonZero([]int{0, 3, 5, 8, 0, 2, 9}))
arr := [5]int{0, 154, 12, 35, 138}
fmt.Println(smallestNonZero(arr[:]))
輸出(在Go Playground上試試):
1
2
12

TA貢獻1772條經驗 獲得超5個贊
Go 編程語言規范
切片表達式
切片表達式從字符串、數組、指向數組的指針或切片構造子字符串或切片。有兩種變體:一種是指定上下限的簡單形式,另一種是同時指定容量范圍的完整形式。
簡單的切片表達式
對于字符串、數組、指向數組的指針或切片 a,主要表達式
a[low : high]
構造一個子串或切片。索引 low 和 high 選擇操作數 a 的哪些元素出現在結果中。結果的索引從 0 開始,長度等于高 - 低。對數組進行切片后
a := [5]int{1, 2, 3, 4, 5}
s := a[1:4]
切片 s 的類型為 []int,長度為 3,容量為 4 和元素
s[0] == 2
s[1] == 3
s[2] == 4
為方便起見,可以省略任何索引。缺失的低指數默認為零;缺少的高索引默認為切片操作數的長度:
a[2:] // same as a[2 : len(a)]
a[:3] // same as a[0 : 3]
a[:] // same as a[0 : len(a)]
如果 a 是指向數組的指針,則 a[low : high] 是 (*a)[low : high] 的簡寫。
要將 type 轉換[5]int為 type []int,請對數組進行切片。例如,
package main
import "sort"
func main() {
var distancematrix [5][5]int
sort.Ints(distancematrix[0][:])
}
- 2 回答
- 0 關注
- 171 瀏覽
添加回答
舉報