Maison  >  Article  >  développement back-end  >  Erreur introuvable, le script Go ne fonctionne pas comme prévu

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

WBOY
WBOYavant
2024-02-09 12:12:27694parcourir

找不到错误,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}
}

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]
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}
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer