Maison  >  Article  >  développement back-end  >  Tableau inversé dans Golang sans changer les positions des nombres négatifs

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

WBOY
WBOYavant
2024-02-08 21:51:19721parcourir

在 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)
}

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

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