[Swift]LeetCode905. 按奇偶排序數組 | Sort Array By Parity

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: http://www.javashuo.com/article/p-ejrzlzld-me.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

Given an array A of non-negative integers, return an array consisting of all the even elements of A, followed by all the odd elements of A.git

You may return any answer array that satisfies this condition. github

Example 1:數組

Input: [3,1,2,4]
Output: [2,4,3,1] The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted. 

Note:微信

  1. 1 <= A.length <= 5000
  2. 0 <= A[i] <= 5000

給定一個非負整數數組 A,返回一個由 A 的全部偶數元素組成的數組,後面跟 A 的全部奇數元素。app

你能夠返回知足此條件的任何數組做爲答案。 this

示例:spa

輸入:[3,1,2,4]
輸出:[2,4,3,1]
輸出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也會被接受。 

提示:code

  1. 1 <= A.length <= 5000
  2. 0 <= A[i] <= 5000

68ms

 

 1 class Solution {
 2     func sortArrayByParity(_ A: [Int]) -> [Int] {
 3         guard !A.isEmpty else {
 4             return []
 5         }
 6         var array = A
 7         var left = 0
 8         var right = A.count - 1           
 9         while(left < right && right > left) {
10             while(array[left] & 1 == 0 && left < right) {
11                 left += 1
12             }
13             while(array[right] & 1 == 1 && right > left) {
14                 right -= 1
15             }
16             if left != right {
17                 let temp = array[left]
18                 array[left] = array[right]
19                 array[right] = temp
20                 left += 1
21                 right -= 1
22             }
23         }  
24         return array
25     }
26 }

Runtime: 72 ms
Memory Usage: 19.4 MB
 1 class Solution {
 2     func sortArrayByParity(_ A: [Int]) -> [Int] {
 3         var A = A
 4         var left = 0
 5         var right = 0
 6         let count = A.count
 7         while right < count {
 8             // 偶數
 9             if A[right] & 1 == 0 { 
10                 if left != right {
11                     A[left] ^= A[right]
12                     A[right] = A[left] ^ A[right]
13                     A[left] ^= A[right]
14                 }
15                 left += 1
16             }
17             right += 1
18         }
19         return A
20     }
21 }

72mshtm

 1 class Solution {
 2     func sortArrayByParity(_ A: [Int]) -> [Int] {
 3         var even: [Int] = [], odd: [Int] = []
 4         A.forEach {
 5             if $0 % 2 == 0 {
 6                 even.append($0)
 7             } else {
 8                 odd.append($0)
 9             }
10         }
11         
12         return even + odd
13     }
14 }

76ms

 1 class Solution {
 2     func sortArrayByParity(_ A: [Int]) -> [Int] {
 3         var res = A
 4         var i = 0, pos = 0
 5     
 6         while i < A.count {
 7             if res[i] & 1 == 0 {
 8                 let val = res.remove(at: i)
 9                 res.insert(val, at: pos)
10                 pos += 1
11             }
12             i += 1
13         }
14     
15         return res
16     }
17 }

80ms

 1 class Solution {
 2     func sortArrayByParity(_ A: [Int]) -> [Int] {
 3         var parity: [Int] = []
 4         
 5         for num in A {
 6             if num & 0b1 == 0b1 {
 7                 parity.insert(num, at: parity.count)
 8             } else {
 9                 parity.insert(num, at: 0)
10             }
11         }
12         
13         return parity
14     }
15 }

84ms

 1 class Solution {
 2     func sortArrayByParity(_ A: [Int]) -> [Int] {
 3     var arr = A
 4     var i = 0
 5     var j = A.count - 1
 6     while (i < j) {
 7         if (arr[i] % 2 > arr[j] % 2) {
 8             var temp = arr[i]
 9             arr[i] = arr[j]
10             arr[j] = temp
11         }
12         
13         if (arr[i] % 2 == 0) { i += 1 }
14         if (arr[j] % 2 == 1) { j -= 1 }
15     }
16     return arr
17     }
18 }

88ms

 1 class Solution {
 2     func sortArrayByParity(_ A: [Int]) -> [Int] {
 3         let odd = A.filter { (num) -> Bool in
 4             return (num % 2 == 1)
 5         }
 6         let even = A.filter { (num) -> Bool in
 7             return (num % 2 == 0)
 8         }
 9         return even + odd
10     }
11 }

100ms

class Solution {
    func sortArrayByParity(_ A: [Int]) -> [Int] {
        return A.sorted(by: { $0 % 2 < $1 % 2 })
    }
}

104ms

1 class Solution {
2     func sortArrayByParity(_ A: [Int]) -> [Int] {
3         var B = A
4         _ = B.partition(by: { $0 % 2 != 0 })
5         return B
6     }
7 }

116ms

class Solution {
    func sortArrayByParity(_ A: [Int]) -> [Int] {
        return A.sorted(by: { return $0 % 2 == 0 && $1 % 2 == 1})
    }
}

132ms

1 class Solution {
2     func sortArrayByParity(_ A: [Int]) -> [Int] {
3         return A.sorted(by: { (lhs, rhs) -> Bool in
4             return lhs % 2 == 0
5         })
6     }
7 }

184ms

 1 class Solution {
 2     func sortArrayByParity(_ A: [Int]) -> [Int] {
 3         return A.sorted { lhs, rhs in
 4             switch (lhs % 2, rhs % 2) {
 5             case (0, 0):
 6                 return true
 7             case (0, 1):
 8                 return true
 9             case (1, 0):
10                 return false
11             case (1, 1):
12                 return true
13             default:
14                 fatalError()    
15             }
16         }
17     }
18 }

248ms

1 class Solution {
2     func sortArrayByParity(_ A: [Int]) -> [Int] {
3         return A.filter{ $0 % 2 == 0 } + A.filter { $0 % 2 != 0 }
4     }
5 }
相關文章
相關標籤/搜索