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