2 回答

TA貢獻1851條經(jīng)驗 獲得超4個贊
您應(yīng)該更改為 。arrLen := len(nums) + 1arrLen := len(nums)
數(shù)組長度為 4。為此,索引為 0,1,2,3。但是當(dāng)你試圖做.該值現(xiàn)在是 。但你只有4個元素。并從循環(huán)中嘗試獲取數(shù)組中不存在的元素。這將為您提供運行時錯誤,并且會崩潰。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條經(jīng)驗 獲得超10個贊
下面是程序中的更正,用于從自然數(shù)序列中查找單個缺失的數(shù)字。您正在索引數(shù)組 nums[len(nums) + 1] 超出數(shù)組的邊界。如果允許,這應(yīng)該訪問隨機內(nèi)存并將任何垃圾值讀取為合法值,您甚至不會知道如此難以找到的錯誤。好消息是Go檢查您是否僅訪問數(shù)組中存
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)
}
或者,您可以使用范圍循環(huán)來確保安全: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 規(guī)格中閱讀此內(nèi)容
- 2 回答
- 0 關(guān)注
- 179 瀏覽
添加回答
舉報