首頁  >  文章  >  後端開發  >  在 Golang 中反轉數組而不改變負數位置

在 Golang 中反轉數組而不改變負數位置

WBOY
WBOY轉載
2024-02-08 21:51:19721瀏覽

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

php小編百草在Golang中反轉數組而不改變負數位置是一個常見的問題。在處理陣列反轉時,通常會使用簡單直接的方法,即使用兩個指標分別指向陣列的頭部和尾部,然後交換它們的值,直到兩個指標相遇。但是,如果數組中存在負數,我們可能需要保持它們的位置不變。為了解決這個問題,我們可以使用兩個輔助數組,一個用於儲存正數,另一個用於儲存負數。然後,我們分別對這兩個陣列進行反轉操作,最後再將它們合併起來。這樣就可以實現在不改變負數位置的情況下反轉整個數組。這種方法簡單有效,可以在Golang中輕鬆實現。

問題內容

我想反轉數組而不更改負數位置。下面是我嘗試過的程序,我在這裡缺少一些簡單的邏輯。任何幫助將不勝感激。

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

預期輸出:[5 3 2 -4 1 -6 -7]

我得到的輸出:[-6 5 3 -4 2 1 -7]

解決方法

你已經非常接近了,你只需要在檢查數字是否為負的條件之後加入continue 。所以你的 swapContents1 函數會如下:

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

以上是在 Golang 中反轉數組而不改變負數位置的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除