調整陣列順序使奇數字於偶數前面 雙指標 快慢指標

2021-10-08 23:24:46 字數 1254 閱讀 5196

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分

示例:

輸入:nums = [1,2,3,4]

輸出:[1,3,2,4]

注:[3,1,2,4] 也是正確的答案之一。

1 <= nums.length <= 50000

1 <= nums[i] <= 10000

在這個方法中,可以定義雙指標 i 和 j ,指標 i 從左向右尋找偶數,指標 j 從右向左尋找奇數,然後將偶數 nums[i] 和 奇數 nums[j] 交換,這樣就可以保證指標 i 左邊都是奇數,指標 j 右邊都是偶數 。

複雜度分析:

時間複雜度 o(n): n 為陣列 nums 長度,雙指標 i, j 共同遍歷整個陣列。

空間複雜度 o(1) : 雙指標 i, j 使用常數大小的額外空間。

**:

x&1 位運算 等價於 x%2 取餘運算,即皆可用於判斷數字奇偶性。

class

solution

return nums;

//返回已修改的nums陣列

}}

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

複雜度分析:

時間複雜度 o(n): n 為陣列 nums 長度,快慢指標 fast,slow 共同遍歷整個陣列。

空間複雜度 o(1) : 快慢指標 fast,slow 使用常數大小的額外空間。

**:

class

solution

slow++

;//慢指標slow+1

} fast++

;//快指標fast+1

}return nums;

//返回已修改的nums陣列

}}

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

題目 輸入乙個整數陣列,調整陣列中數字的順序,使得所有奇數字於陣列的前面部分,偶數字於陣列的後面部分。思路 要求時間複雜度是 n 1 從頭開始掃瞄陣列,確定數是奇數不動,偶數的話就移動陣列最後。這樣每個偶數都要進行移動,最壞的時間複雜度達到 n 2 2 用兩個指標,頭指標指向陣列開始,尾指標指向陣列...

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

1 題目 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。2 解題思路 2.1 最簡單思路,時間複雜度o n2 從頭掃瞄這個陣列,每碰到乙個偶數時,拿出這個數字,並把位於這個數字後面的所有數字往前挪動一位。挪完之後在陣列的末尾有乙個...

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

題目描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。輸入 每個輸入檔案包含一組測試案例。對於每個測試案例,第一行輸入乙個n,代表該陣列中數字的個數。接下來的一行輸入n個整...