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 关注
- 144 浏览
添加回答
举报