leetcode 922. 按奇偶排序陣列 ii
給定乙個非負整數陣列 a, a 中一半整數是奇數,一半整數是偶數。
對陣列進行排序,以便當 a[i] 為奇數時,i 也是奇數;當 a[i] 為偶數時, i 也是偶數。
你可以返回任何滿足上述條件的陣列作為答案。
示例:2 <= a.length <= 20000輸入:[4,2,5,7]
輸出:[4,5,2,7]
解釋:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也會被接受。
a.length % 2 == 0
0 <= a[i] <= 1000
建立新列表b。
逐一取出a中符合b列表當前奇偶性的a列表數字新增到b列表。
比如資料[4,2,5,7]
,首先是4,新增到b[0]
中,a列表變更為[2,5,7]
。其次是2,不符合要求,往後尋找第乙個奇數是5,新增到b[1]
,a列表變更為[2,7]
。這個思路核心是a列表的長度是變化的,要控制好列表的下標,不要出現超限錯誤。
class
solution
:def
sortarraybyparityii
(self, a)
:"""
:type a: list[int]
:rtype: list[int]
"""i=
0 b=
for i in
range
(len
(a)):if
(i %2)
== a[0]
%2:0
))else
: j=
0while j<
len(a)
:# a列表長度是變化的,要用while迴圈
if i %
2== a[j]%2
:)break
# 新增成功後,退出迴圈
else
: j +=
1return b
由於涉及迴圈巢狀,演算法複雜度為 o(n2),提交後效果不好,用時在後2%。
61 / 61 個通過測試用例這個是看別人的思路,特別粗暴執行用時:824 ms
執行用時戰勝1.91%的提交記錄
將a
中的偶數和奇數分別取出來,放在evennum
和oddnum
中。
依次將evennum
和oddnum
中的數放入b
中。
class
solution
:def
sortarraybyparityii
(self, a)
:"""
:type a: list[int]
:rtype: list[int]
"""b=
evennum=
oddnum=
for i in
range
(len
(a))
:if a[i]%2
==0:else
:for i in
range
(len
(evennum)):
])])
return b
有兩個迴圈,複雜度為 o(n)。提交執行用時排名在14%以內。
61 / 61 個通過測試用例這個是大神的思路,前1%。執行用時:168 ms
執行用時戰勝 87.62% 的提交記錄
建立乙個和a
一樣長度的全零列表b
。
直接把a
的元素往b
中填,偶數就填到偶數字,奇數就填到奇數字。
class
solution
:def
sortarraybyparityii
(self, a)
:"""
:type a: list[int]
:rtype: list[int]
"""i =
0 j =
1 ans =[0
]*len(a)
for num in a:
if num %2==
0:ans[i]
= num
i +=
2else
: ans[j]
= num
j +=
2return ans
這個思路更好,只用迴圈一次,複雜度為 o(n)。 leetcode 922按奇偶排序陣列
給定乙個非負整數陣列 a,a 中一半整數是奇數,一半整數是偶數。對陣列進行排序,以便當 a i 為奇數時,i 也是奇數 當 a i 為偶數時,i 也是偶數。你可以返回任何滿足上述條件的陣列作為答案。示例 輸入 4,2,5,7 輸出 4,5,2,7 解釋 4,7,2,5 2,5,4,7 2,7,4,5...
leetcode 922 按奇偶排序陣列 II
給定乙個非負整數陣列a,a 中一半整數是奇數,一半整數是偶數。對陣列進行排序,以便當a i 為奇數時,i也是奇數 當a i 為偶數時,i也是偶數。你可以返回任何滿足上述條件的陣列作為答案。示例 輸入 4,2,5,7 輸出 4,5,2,7 解釋 4,7,2,5 2,5,4,7 2,7,4,5 也會被接...
LeetCode 922 按奇偶排序陣列II
題目描述 給定乙個非負整數陣列a,a 中一半整數是奇數,一半整數是偶數。對陣列進行排序,以便當a i 為奇數時,i也是奇數 當a i 為偶數時,i也是偶數。你可以返回任何滿足上述條件的陣列作為答案。示例 輸入 4,2,5,7 輸出 4,5,2,7 解釋 4,7,2,5 2,5,4,7 2,7,4,5...