Tatasusunan terbalik dalam Golang tanpa mengubah kedudukan nombor negatif

WBOY
Lepaskan: 2024-02-08 21:51:19
ke hadapan
743 orang telah melayarinya

在 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)
}
Salin selepas log masuk

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--
    }
}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!