Maison > développement back-end > Golang > le corps du texte

Erreur introuvable, le script Go ne fonctionne pas comme prévu

WBOY
Libérer: 2024-02-09 12:12:27
avant
697 Les gens l'ont consulté

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

L'éditeur php Xinyi peut rencontrer le problème d'une erreur introuvable lors de l'écriture de scripts Go, empêchant le script de fonctionner comme prévu. Il s’agit d’un problème courant, mais qui peut être résolu. Cet article vous présentera certaines causes possibles de ce problème et proposera des solutions pour vous aider à résoudre ce problème plus facilement et à assurer le bon fonctionnement du script Go.

Contenu de la question

J'essaie de résoudre ce problème de leetcode https://leetcode.com/problems/two-sum/ Mais pour une raison quelconque, cela ne fonctionne pas et je ne comprends vraiment pas ce qui ne va pas. Il renvoie simplement [-1 -1] tandis que [100 137] est la sortie correcte.

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}
}
Copier après la connexion

Je n'ai aucune compétence en débogage pour le moment, donc je me suis juste assuré que nums[starter], nums[i], toutes les boucles fonctionnaient comme prévu, j'ai utilisé fmt.println() pour enregistrer leurs valeurs et ça semblait être au bon endroit, je ne sais pas ce qui ne va pas

Solution

Le problème avec votre code est qu'il n'entre jamais dans le if

if target-nums[starter] == nums[i]
Copier après la connexion
La variable

starter restera à 0 après la première boucle car elle ne stockera que la première valeur inférieure à la cible.

Si vous n'êtes pas préoccupé par les performances, cette fonction o(n²) produit le résultat correct :

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}
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!