題目描述:
輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於位於陣列的後半部分
思路:
我認真看了一下,題目應該是要求在原地調整,所以這裡不能再開闢乙個陣列
第一種:從頭往尾掃瞄陣列,遇到乙個偶數就把它提出來,依次把其後的數字前移一格,最後將偶數插入末尾的空位。時間複雜度為o(n2)(不能夠拿到offer)
# -*- coding:utf-8 -*-
class
solution
:def
reorderarray
(self, array)
:# write code here
p =0 q =
len(array)-1
while p < q:
if array[p]%2
==0:if array[q]%2
==1: array[p]
,array[q]
= array[q]
,array[p]
q -=
1continue
p +=
1return array
第二種:採用兩指標分別從首尾出發,當頭指標遇到乙個偶數,並且尾指標遇到乙個奇數時,交換兩指標的數字,直到兩指標相遇。時間複雜度為o(n),(類似於快排)(面試官期待的解法)
def
reorderarray
(self, array)
: n =
len(array)
head =
0 tail = n -
1while head < tail:
while array[head]%2
!=0: head +=
1while array[tail]%2
==0: tail -=
1 array[head]
, array[tail]
= array[tail]
, array[head]
head +=
1 tail -=
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 演算法效率不是最優。第二種首尾雙指標法,演算法過程 第三種快慢指標法,顧名思義就是通過兩...