2 回答
TA贡献1851条经验 获得超4个赞
您应该更改为 。arrLen := len(nums) + 1arrLen := len(nums)
数组长度为 4。为此,索引为 0,1,2,3。但是当你试图做.该值现在是 。但你只有4个元素。并从循环中尝试获取数组中不存在的元素。这将为您提供运行时错误,并且会崩溃。arrLen := len(nums) + 1arrlen5
这个将为你工作:
package main
import "fmt"
func missingNumber(nums []int) int {
arrSum := 0
arrLen := len(nums)
for i := 0; i < arrLen; i++ {
arrSum += nums[i]
}
m := arrLen + 1
numSum := m * (m + 1) / 2
missingNumber := numSum - arrSum
return missingNumber
}
func main() {
nums := []int{1, 3, 4, 5}
result := missingNumber(nums)
fmt.Println(result)
}
TA贡献1815条经验 获得超10个赞
下面是程序中的更正,用于从自然数序列中查找单个缺失的数字。您正在索引数组 nums[len(nums) + 1] 超出数组的边界。如果允许,这应该访问随机内存并将任何垃圾值读取为合法值,您甚至不会知道如此难以找到的错误。好消息是Go检查您是否仅访问数组中存
package main
import "fmt"
func missingNumber(nums []int) int {
arrSum := 0
arrLen := len(nums)
for i := 0; i < arrLen; i++ {
arrSum += nums[i]
}
//let n be the total natural number: which will be provided plus 1 missing
n := arrLen + 1
numSum := n * (n + 1) / 2
missingNumber := numSum - arrSum
return missingNumber
}
func main() {
nums := []int{1, 3, 4, 5}
result := missingNumber(nums)
fmt.Println(result)
}
或者,您可以使用范围循环来确保安全:or _, i := range nums { ...
package main
import "fmt"
func missingNumber(nums []int) int {
arrSum := 0
arrLen := len(nums)
for _, i := range nums {
arrSum += i
}
//let n be the total natural number; which will be provided plus 1 missing
n := arrLen + 1
numSum := n * (n + 1) / 2
missingNumber := numSum - arrSum
return missingNumber
}
func main() {
nums := []int{1, 3, 4, 5}
result := missingNumber(nums)
fmt.Println(result)
}
在的那些元素,而不是超出该元素。在 Go 规格中阅读此内容
- 2 回答
- 0 关注
- 154 浏览
添加回答
举报