题目: 给定一个非负整数数组 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..<even.count {
result.append(even[i])
result.append(odd[i])
}
return result
}
双指针
这种方法比较巧妙, 创建个初始容器数组 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 算法合集地址
网友评论