給乙個整數陣列,讓它的奇數和偶數分開並且奇數在陣列的前面,偶數在陣列的後面。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 題目描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。輸入 每個輸入檔案包含一組測試案...