3 回答
TA贡献1794条经验 获得超7个赞
Golang 切片是通过引用传递的。因此,您不需要首先将指针传递到函数中,但您确实需要将L
andR
或 else 的显式副本合并到一个不同的切片中。您当前正在写入您从中获取值的相同底层内存。
TA贡献1856条经验 获得超5个赞
您不需要所有索引:切片已经是数组的视图。这是一个使用纯切片操作的完整示例:
package main
import "fmt"
// Merge takes two sorted, increasing slices of ints and
// returns a slice combining them into a single sorted, increasing
// slice.
func Merge(a, b []int) []int {
res := make([]int, 0, len(a)+len(b))
for len(a) > 0 || len(b) > 0 {
if len(b) == 0 || len(a) > 0 && a[0] <= b[0] {
res = append(res, a[0])
a = a[1:]
} else {
res = append(res, b[0])
b = b[1:]
}
}
return res
}
func main() {
a := []int{1, 2, 5, 6, 3, 4, 7, 9}
fmt.Println(Merge(a[:4], a[4:]))
}
- 3 回答
- 0 关注
- 222 浏览
添加回答
举报