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

Tableau inversé dans Golang sans changer les positions des nombres négatifs

WBOY
Libérer: 2024-02-08 21:51:19
avant
775 Les gens l'ont consulté

在 Golang 中反转数组而不改变负数位置

éditeur php Baicao Inverser un tableau sans changer la position des nombres négatifs est un problème courant dans Golang. Lorsqu'il s'agit d'inversion de tableau, une méthode simple et directe est généralement utilisée, qui consiste à utiliser deux pointeurs pour pointer vers la tête et la queue du tableau, puis à échanger leurs valeurs jusqu'à ce que les deux pointeurs se rencontrent. Cependant, s’il y a des nombres négatifs dans le tableau, nous devrons peut-être conserver leurs positions inchangées. Pour résoudre ce problème, nous pouvons utiliser deux tableaux auxiliaires, un pour stocker les nombres positifs et un autre pour stocker les nombres négatifs. Ensuite, nous inversons les deux tableaux séparément et enfin les fusionnons. Cela vous permet d'inverser l'ensemble du tableau sans changer la position des nombres négatifs. Cette méthode est simple et efficace et peut être facilement implémentée dans Golang.

Contenu de la question

Je souhaite inverser le tableau sans changer les positions négatives. Vous trouverez ci-dessous le programme que j'ai essayé, il me manque ici une logique simple. Toute aide serait grandement appréciée.

package main
 import "fmt"
 func swapContents1(listObj []int) {
   i, j := 0, len(listObj)-1
    for i < j {
    if listObj[i] < 0 {
         i++
    }
    if listObj[j] < 0 {
        j--
    }
    listObj[i], listObj[j] = listObj[j], listObj[i]
    i++
    j--
   }
 }

func main() {

  listObj := []int{1, 2, 3, -4, 5, -6, -7}

  swapContents1(listObj)

  fmt.Println(listObj)
}
Copier après la connexion

Résultat attendu : [5 3 2 -4 1 -6 -7]

Le résultat que j'obtiens : [-6 5 3 -4 2 1 -7]

Solution de contournement

Vous êtes déjà très proche, il vous suffit d'ajouter continue 。所以你的 swapContents1 après la condition qui vérifie si le nombre est négatif ou non, la fonction le fera ressemble à ça :

func swapContents1(listObj []int) {
    i, j := 0, len(listObj)-1
    for i < j {
        if listObj[i] < 0 {
            i++
            continue
        }
        if listObj[j] < 0 {
            j--
            continue
        }
        listObj[i], listObj[j] = listObj[j], listObj[i]
        i++
        j--
    }
}
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