IOS 算法(基础篇) ----- 按奇偶排序数组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] 也会被接受。

之前我们看过排序数组I, 今天看看II

遍历法

这种方法最容易想到, 遍历初始数组A, 挑出奇数构成个全奇数组odd, 偶数构成个全偶数组even
然后按奇偶依次插入新数组result返回

    func sortArrayByParityII(_ A: [Int]) -> [Int] {
        var even:[Int] = [], odd:[Int] = [], result:[Int] = []
        
        for num in A {
            
            if num % 2 == 0 {
                even.append(num)
            }else if num % 2 == 1 {
                odd.append(num)
            }
            
        }
        
        for i in 0..

双指针

这种方法比较巧妙, 创建个初始容器数组 result, 元素个数为A.count
设置奇odd,偶even下标, 初始值 0,1 遍历A数组,
num为偶数, 将A放在偶数位置, even + 2
num为奇数数, 将A放在偶数位置, odd + 2
循环结算, 返回result

    func sortArrayByParityII(_ A: [Int]) -> [Int] {

        var result = Array.init(repeating: 0, count: A.count)
        var even = 0, odd = 1
        
        for num in A {
            if num % 2 == 0 {
                result[even] = num
                even += 2
            }else{
                result[odd] = num
                odd += 2
            }
        }
        return result
    }

题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址

你可能感兴趣的:(IOS 算法(基础篇) ----- 按奇偶排序数组II)