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

2021-10-07 22:49:51 字數 1339 閱讀 4901

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

示例:

輸入:nums = [1,2,3,4]輸出:[1,3,2,4]注:[3,1,2,4] 也是正確的答案之一。
這應該是最直觀的思路了,即建立兩個列表,之後遍歷nums,所有奇數放入乙個列表,所有偶數放入乙個列表。

返回兩個列表的合併即可。

class solution:

def exchange(self, nums: list[int]) -> list[int]:

even =

odd =

for i in nums:

if i %2 == 1: # 奇數

else:

return odd + even

時間複雜度o(n)

空間複雜度o(n)

雖然結果還行,但這種問題在使用指標的情況下,空間複雜度應該是可以達到o(1)的。因此第二種思路如下

思路也很簡單,即第乙個指標從左到右遍歷,一旦發現偶數即停止,不妨設此時位置是i;

接下來第2個指標從右到左遍歷,一旦發現奇數即停止,不妨設此時位置是j;

交換nums[i]和nums[j];

接著,第乙個指標繼續遍歷,繼續遇到偶數就停止;然後繼續開始第二個指標的遍歷和交換;

直到i==j停止。

時間複雜度o(n)

空間複雜度o(1)

note:判斷奇數/偶數時不僅可以通過對2取餘數;也可以通過n&1(與1按位與)判斷。原因如下

>>> bin(10)

'0b1010'

>>> 10&1

0>>> bin(11)

'0b1011'

>>> 11&1

1

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

題目 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。示例 輸入 nums 1,2,3,4 輸出 1,3,2,4 注 3,1,2,4 也是正確的答案之一。1 nums.length 50000 1 nums i 10000 解題思路...

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

題目 解題思路 三種方法,暴力解法,首尾雙指標,快慢指標法。第一種暴力解法,通過引入乙個新的陣列用於記錄,從頭開始遍歷整個陣列,奇數從新陣列的開始為存入,偶數從最後一位開始存入,此方法時間和空間複雜度都是o n 演算法效率不是最優。第二種首尾雙指標法,演算法過程 第三種快慢指標法,顧名思義就是通過兩...

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

題目 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。i o描述 void test1 test test1 numbers,sizeof numbers sizeof int void test2 test test2 numbe...