Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tatasusunan terbalik dalam Golang tanpa mengubah kedudukan nombor negatif

Tatasusunan terbalik dalam Golang tanpa mengubah kedudukan nombor negatif

WBOY
WBOYke hadapan
2024-02-08 21:51:19721semak imbas

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

editor php Baicao Membalikkan tatasusunan tanpa mengubah kedudukan nombor negatif adalah masalah biasa di Golang. Apabila berurusan dengan pembalikan tatasusunan, kaedah yang mudah dan mudah biasanya digunakan, iaitu menggunakan dua penunjuk untuk menunjuk ke kepala dan ekor tatasusunan, dan kemudian menukar nilainya sehingga dua penunjuk bertemu. Walau bagaimanapun, jika terdapat nombor negatif dalam tatasusunan, kita mungkin perlu mengekalkan kedudukannya tidak berubah. Untuk menyelesaikan masalah ini, kita boleh menggunakan dua tatasusunan tambahan, satu untuk menyimpan nombor positif dan satu lagi untuk menyimpan nombor negatif. Kemudian, kami membalikkan dua tatasusunan secara berasingan dan akhirnya menggabungkannya. Ini membolehkan anda membalikkan keseluruhan tatasusunan tanpa mengubah kedudukan nombor negatif. Kaedah ini mudah dan berkesan serta mudah dilaksanakan di Golang.

Kandungan soalan

Saya mahu membalikkan tatasusunan tanpa mengubah kedudukan negatif. Di bawah adalah program yang saya cuba, saya kehilangan beberapa logik mudah di sini. Sebarang bantuan amatlah dihargai.

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

Output yang dijangka: [5 3 2 -4 1 -6 -7]

Output yang saya dapat: [-6 5 3 -4 2 1 -7]

Penyelesaian

Anda sudah sangat rapat, anda hanya perlu menambah fungsi continue 。所以你的 swapContents1 selepas syarat yang memeriksa sama ada nombor itu negatif atau tidak. akan kelihatan seperti ini:

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

Atas ialah kandungan terperinci Tatasusunan terbalik dalam Golang tanpa mengubah kedudukan nombor negatif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam