2 回答

TA貢獻1789條經驗 獲得超8個贊
您應該更改arrLen := len(nums) + 1為arrLen := len(nums).
您的數組長度為 4。為此,索引為 0,1,2,3。但是當你試圖做 arrLen := len(nums) + 1. 現在的arrlen值是5。但你只有 4 個元素。并從您的循環中嘗試獲取數組中不存在的元素。這會給你一個運行時錯誤,它會恐慌。
這個對你有用:
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貢獻1776條經驗 獲得超12個贊
這是您的程序中的更正,用于從自然數序列中查找單個缺失的數字。您正在索引數組 nums[len(nums) + 1] 超出數組的范圍。如果允許,這應該訪問隨機內存并讀取任何合法的垃圾值,您甚至不會知道如此難以發現的錯誤。好消息是 Go 正在檢查您是否只訪問數組中的那些元素,而不是超出這些元素。在 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)
}
- 2 回答
- 0 關注
- 149 瀏覽
添加回答
舉報