[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9828530.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Given an array A
of non-negative integers, half of the integers in A are odd, and half of the integers are even.
Sort the array so that whenever A[i]
is odd, i
is odd; and whenever A[i]
is even, i
is even.
You may return any answer array that satisfies this condition.
Example 1:
Input: [4,2,5,7]
Output: [4,5,2,7]
Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted.
Note:
2 <= A.length <= 20000
A.length % 2 == 0
0 <= A[i] <= 1000
给定一个非负整数数组 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
288ms
1 class Solution { 2 func sortArrayByParityII(_ A: [Int]) -> [Int] { 3 guard A.count > 1 else { 4 return A 5 } 6 7 var A = A 8 var evenPointer = 0 9 var oddPointer = 1 10 while evenPointer < A.count { 11 12 if A[evenPointer] % 2 == 0 { 13 evenPointer += 2 14 } else { 15 A.swapAt(evenPointer, oddPointer) 16 oddPointer += 2 17 } 18 } 19 return A 20 } 21 }
292ms
1 class Solution { 2 func sortArrayByParityII(_ A: [Int]) -> [Int] { 3 let n = A.count 4 var A = A 5 var i = 0 6 var j = 1 7 while i < n && j < n { 8 while i < n && A[i] % 2 == 0 { 9 i += 2 10 } 11 while (j < n && A[j] % 2 == 1) { 12 j += 2 13 } 14 if i < n && j < n { 15 (A[i], A[j]) = (A[j], A[i]) 16 } 17 } 18 return A; 19 } 20 }
296ms
1 class Solution { 2 func sortArrayByParityII(_ A: [Int]) -> [Int] { 3 var outputEven: [Int] = [] 4 var outputOdd: [Int] = [] 5 6 for value in A { 7 if value % 2 == 0 { 8 outputEven.append(value) 9 } else { 10 outputOdd.append(value) 11 } 12 } 13 14 var output:[Int] = [] 15 for index in 0 ..< outputEven.count { 16 output.append(outputEven[index]) 17 output.append(outputOdd[index]) 18 } 19 return output 20 } 21 }
300ms
1 class Solution { 2 func sortArrayByParityII(_ A: [Int]) -> [Int] { 3 4 var even = [Int]() 5 var odd = [Int]() 6 7 for i in A { 8 if i % 2 == 0 { 9 even.append(i) 10 } else { 11 odd.append(i) 12 } 13 } 14 15 var output = [Int]() 16 17 for i in 0..<even.count { 18 output.append(even[i]) 19 output.append(odd[i]) 20 } 21 22 return output 23 } 24 }
308ms
1 class Solution { 2 func sortArrayByParityII(_ A: [Int]) -> [Int] { 3 var copyA = A 4 var oddArray: [Int] = [] 5 var evenArray: [Int] = [] 6 for (index, interger) in A.enumerated() { 7 if index % 2 == 0, interger % 2 != 0 { 8 oddArray.append(index) 9 } 10 if index % 2 != 0, interger % 2 == 0 { 11 evenArray.append(index) 12 } 13 } 14 for (index, _) in oddArray.enumerated() { 15 copyA.swapAt(oddArray[index], evenArray[index]) 16 } 17 return copyA 18 } 19 }
320ms
1 class Solution { 2 func sortArrayByParityII(_ A: [Int]) -> [Int] { 3 var evenNums = A.filter{$0 % 2 != 0} 4 var oddNums = A.filter{$0 % 2 == 0} 5 var result = [Int]() 6 7 for (index , _) in oddNums.enumerated() { 8 result.append(oddNums[index]) 9 result.append(evenNums[index]) 10 } 11 12 return result 13 } 14 }
324ms
1 class Solution { 2 func sortArrayByParityII(_ A: [Int]) -> [Int] { 3 var N:Int = A.count 4 var ans:[Int] = [Int](repeating: 0,count: N) 5 6 var t:Int = 0 7 for x in A 8 { 9 if x % 2 == 0 10 { 11 ans[t] = x 12 t += 2 13 } 14 } 15 t = 1 16 for x in A 17 { 18 if x % 2 == 1 19 { 20 ans[t] = x 21 t += 2 22 } 23 } 24 return ans 25 } 26 }
328ms
1 class Solution { 2 func sortArrayByParityII(_ a: [Int]) -> [Int] { 3 var evenNumbers: [Int] = [] 4 var oldNumbers: [Int] = [] 5 for n in a { 6 if n % 2 == 0 { 7 evenNumbers.append(n) 8 } else { 9 oldNumbers.append(n) 10 } 11 } 12 13 let zipped = zip(evenNumbers,oldNumbers).flatMap{ [$0.0, $0.1] } 14 return zipped 15 } 16 }
368ms
1 class Solution { 2 func sortArrayByParityII(_ A: [Int]) -> [Int] { 3 var res1 = [Int]() 4 var res2 = [Int]() 5 var res3 = [Int]() 6 7 for num in A { 8 if num % 2 == 0{//ou 9 res1.append(num) 10 } 11 else{//ji 12 res2.append(num) 13 } 14 } 15 for i in 0..<res1.count{ 16 res3.append(res1[i]) 17 res3.append(res2[i]) 18 } 19 return res3 20 } 21 }
416ms
1 class Solution { 2 func sortArrayByParityII(_ A: [Int]) -> [Int] { 3 let b = A.sorted { (i, _) in return i % 2 == 0 } 4 let count = A.count 5 var result:[Int] = Array(repeating: 0, count: count) 6 for i in 0..<count/2 { 7 result[2*i] = b[i] 8 result[2*i+1] = b[count-1-i] 9 } 10 11 return result 12 } 13 }