377,調整陣列順序使奇數字於偶數前面

2021-10-09 18:32:53 字數 1653 閱讀 2250

給乙個整數陣列,讓它的奇數和偶數分開並且奇數在陣列的前面,偶數在陣列的後面

01臨時陣列求解

這題沒什麼難度,首先最容易想到的是申請乙個同樣大小的臨時陣列,把原陣列的值放到臨時陣列中,奇數從前面放,偶數從後面放,我們來看下**

public

int[

]exchange

(int

nums)

else

}return temp;

}

02雙指標求解

我們可以使用兩個指標left和right。left從左邊開始掃瞄,如果是奇數就往右走,如果遇到偶數就停下來(此時left指向的是偶數),right從右邊開始掃瞄,如果是偶數就往左走,如果是奇數就停下來(此時right指向的是奇數),交換left和right指向的值。繼續迴圈,直到left==right為止。我們就以陣列[3,2,4,9,5,8,1]為例來畫個圖看一下

//如果是偶數,就往前挪,直到遇到奇數為止

while

(left < right &&

(nums[right]&1

)==0)

//交換兩個值

if(left < right)

}return nums;

}**16到20行是交換兩個數字的值,交換兩個數的值有多種方式,這裡選擇的是通過異或來交換,如果看不明白可以看一下下面往期推薦中的第357題。

03

快慢指標求解

第三種方式使用的是快慢指標,和上一種解決方式有一點區別,上一種是一前一後掃瞄。我們這裡使用的快慢指標都是從頭開始掃瞄。我們使用兩個指標,乙個快指標fast,乙個慢指標slow。慢指標slow存放下乙個奇數應該存放的位置,快指標fast往前搜尋奇數,搜尋到之後然後就和slow指向的值交換,我們還以上面的資料為例畫個圖來分析下

377,調整陣列順序使奇數字於偶數前面

給乙個整數陣列,讓它的奇數和偶數分開並且奇數在陣列的前面,偶數在陣列的後面。01臨時陣列求解 這題沒什麼難度,首先最容易想到的是申請乙個同樣大小的臨時陣列,把原陣列的值放到臨時陣列中,奇數從前面放,偶數從後面放,我們來看下 public int exchange int nums else retu...

劍指Offer之調整陣列順序使奇數字於偶數前面

從右邊直到第乙個奇數 while left right number right 2 0 奇偶數交換 if left right int main sortoddbeforeeven number,n for i 0 i n i else return 0 題目描述 輸入乙個整數陣列,實現乙個函式來...

九度oj 1516 調整陣列順序使奇數字於偶數前面

時間限制 1 秒 記憶體限制 128 兆 特殊判題 否 提交 3105 解決 999 題目描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。輸入 每個輸入檔案包含一組測試案...