輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。這應該是最直觀的思路了,即建立兩個列表,之後遍歷nums,所有奇數放入乙個列表,所有偶數放入乙個列表。示例:
輸入:nums = [1,2,3,4]輸出:[1,3,2,4]注:[3,1,2,4] 也是正確的答案之一。
返回兩個列表的合併即可。
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...