首頁  >  文章  >  後端開發  >  找不到錯誤,Go 腳本沒有如預期般運作

找不到錯誤,Go 腳本沒有如預期般運作

WBOY
WBOY轉載
2024-02-09 12:12:27692瀏覽

找不到错误,Go 脚本没有按预期工作

php小編新一在編寫Go腳本時可能會遇到找不到錯誤的問題,導致腳本無法如預期運作。這是一個常見的困擾,但也是可以解決的。本文將為大家介紹一些可能導致這個問題的原因,並提供一些解決方法,幫助大家更輕鬆地解決這個問題,讓Go腳本順利運作起來。

問題內容

我試著解決這個 leetcode 問題 https://leetcode.com/problems/two-sum/ 但由於某種原因它不起作用,我真的不明白出了什麼問題。 它只會回傳 [-1 -1],而 [100 137] 是正確的輸出。

package main

import "fmt"

func main() {
    arr := []int{10, 40, 1, 4, 100, 137}
    targetVal := 237
    // twoSum(arr, targetVal)
    fmt.Println(twoSum(arr, targetVal))
}

func twoSum(nums []int, target int) []int {
    starter := 0
    // loop which is supposed to find first occurence of element that is less than target
    for i := 0; i < len(nums); i++ {
        if nums[i] < target {
            starter = i
            break
        }
    }
    // loop that iterates over remaining part of a slice (starting from nums[starter])
    for i := starter; i < len(nums); i++ {
        if target-nums[starter] == nums[i] {
            return []int{nums[starter], nums[i]}
        }
    }
    return []int{-1, -1}
}

我目前沒有任何調試技能,所以我只是確保nums[starter]、nums[i]、所有循環都按預期工作,我使用fmt.println() 來記錄它們的值,並且它似乎在正確的位置,不知道出了什麼問題

解決方法

您的程式碼的問題是它永遠不會進入if 內部

if target-nums[starter] == nums[i]

starter 變數在經過第一個迴圈後將保持為 0,因為它將只儲存第一個小於目標的值。

如果您不擔心效能,這個 o(n²) 函數可以產生正確的結果:

func twoSum(nums []int, target int) []int {
    for i := 0; i < len(nums); i++ {
        for j := 0; j < len(nums); j++ {
            if nums[i]+nums[j] == target && i != j {
                return []int{j, i}
            }
        }
    }
    return []int{-1, -1}
}

以上是找不到錯誤,Go 腳本沒有如預期般運作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除