gpt4 book ai didi

go - twoSum 函数对不同的数组输入有不同的行为

转载 作者:数据小太阳 更新时间:2023-10-29 03:11:57 26 4
gpt4 key购买 nike

当我运行以下代码时,我得到了预期的答案 [3, 4],这是加起来成为我的目标变量的 2 个数字的索引。但是,当我将 myArray 输入更改为 []int{1,2,3,4,6,11,4,12}(我删除了最后 6 个)时,我感到 panic 。请帮助我理解为什么会这样。

func twoSum (nums []int, target int) []int {
length := len(nums) - 1
for i := range nums[:length] {
for j := range nums[i + 1:] {
if nums[i] + nums[j] == target {
return []int{i, j}
break
}
}
}
panic("should never happen")
}

func main() {
myArray := []int{1,2,3,4,6,11,4,12}
myTarget := 10
fmt.Println(twoSum(myArray, myTarget))
}

最佳答案

对于 j := range nums[i + 1:] {

这并不像您预期​​的那样工作:j 这是一个新 slice 的从 0 开始的索引,您在使用 重新 slice nums 后获得nums[i+1:].

如果你仍然想在 nums slice 中拥有绝对索引,你需要手动偏移它,例如:

jx := j + i + 1

然后使用jx代替j

演示:https://play.golang.org/p/s7_tcHvu6fB

或者,您可能使用了一个很好的旧索引 for 而不是 for-range 作为嵌套循环:

for j := i + 1; j < length; j++ {

演示:https://play.golang.org/p/-yF7cWYgYri

关于go - twoSum 函数对不同的数组输入有不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com