题目描述
给定一个非负整数数组 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] 也会被接受。
解法1:预置偶数even和奇数odd的索引,当i为偶数,list[even] = nums[even],even+2;为奇数时同样操作
var sortArrayByParityII = function(nums) {
let odd = 1
let even = 0
let list = []
nums.forEach(item=>{
if(item%2==0){
list[even] = item
even+=2
}else{
list[odd] = item
odd+=2
}
})
return list
};
解法2:暴力解法,将奇数和偶数分别放入两个数组,分别放入list
var sortArrayByParityII = function(nums) {
let list = []
let list1 = []
let list2 = []
nums.forEach(item=>{
if(item%2 == 0){
list2.push(item)
}else{
list1.push(item)
}
})
for(let i = 0;i<list1.length;i++){
list.push(list2[i])
list.push(list1[i])
}
return list
};
解法3:原地算法(省内存,后续解决)
总结:
根据索引寻找最大数和最小数时。可以一边排序一边查找,提高代码索引速度