1 """
2 Given an array A of non-negative integers, half of the integers in A are odd, and half of the integers are even.
3 Sort the array so that whenever A[i] is odd, i is odd; and whenever A[i] is even, i is even.
4 You may return any answer array that satisfies this condition.
5 Example 1:
6 Input: [4,2,5,7]
7 Output: [4,5,2,7]
8 Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted.
9 """
10 """
11 提供三种方法,传送门:https://blog.csdn.net/fuxuemingzhu/article/details/83045735
12 1.直接使用两个数组分别存放奇数和偶数,然后结果就是在这两个里面来回的选取就好了。
13 """
14
15 class Solution1:
16 def sortArrayByParityII(self, A):
17 odd = [x for x in A if x % 2 == 1] #奇数入栈
18 even = [x for x in A if x % 2 == 0] #偶数入栈
19 res = []
20 iseven = True #!!!判断奇偶数
21 while odd or even:
22 if iseven:
23 res.append(even.pop()) #偶数写入结果
24 else:
25 res.append(odd.pop()) #奇数写入结果
26 iseven = not iseven #!!!下一个变为偶数
27 return res
28
29 """
30 先对A进行排序,使得偶数都在前面,奇数都在后面,
31 然后每次从前从后各取一个数,然后放到结果里就好了
32 """
33 class Solution2:
34 def sortArrayByParityII(self, A):
35 A.sort(key=lambda x: x % 2)#!!!此方法可以将偶数防前面,奇数放后面 [0, 1]排序
36 N = len(A)
37 res = []
38 for i in range(N // 2):
39 #" / "就表示 浮点数除法,返回浮点结果;" // "表示整数除法。
40 res.append(A[i]) #添加偶数
41 res.append(A[N - 1 - i]) #添加奇数
42 return res
43
44 """
45 先把结果数组创建好,
46 然后使用奇偶数两个变量保存位置,
47 然后判断A中的每个数字是奇数还是偶数,
48 对应放到奇偶位置就行了。
49 """
50 class Solution3:
51 def sortArrayByParityII(self, A):
52 """
53 :type A: List[int]
54 :rtype: List[int]
55 """
56 N = len(A)
57 res = [0] * N
58 even, odd = 0, 1
59 for a in A:
60 if a % 2 == 1:
61 res[odd] = a
62 odd += 2 #!!!关键点,每次加2
63 else:
64 res[even] = a
65 even += 2 #!!!
66 return res