原题地址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] 也会被接受。
提示:
2 <= A.length <= 20000
A.length % 2 == 0
0 <= A[i] <= 1000
算法
逐个遍历,用一个数组 tmp 记录不合条件的下标。如果 A[i]
不符合条件, tmp 为空或者与 tmp 记录的类型一样,就是都是2倍数 或者非2倍数 ,那么将 i 加入 tmp 中。否则提取 tmp 中任一元素 j ,在 A 中交换 i 和 j 的元素。
代码
class Solution:
def sortArrayByParityII(self, A):
"""
:type A: List[int]
:rtype: List[int]
"""
tmp = []
res, flag = 0, 0
for i in range(len(A)):
if A[i] % 2 != res:
if len(tmp) == 0:
tmp.append(i)
flag = res
elif flag == res:
tmp.append(i)
else:
j = tmp.pop()
A[i], A[j] = A[j], A[i]
res = 1 - res
return A