剑指 Offer 21. 调整数组顺序使奇数位于偶数前面(简单)
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例:
输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。
1.暴力循环
奇数放入一个数组,偶数放入一个数组,合并
/**
* @param {number[]} nums
* @return {number[]}
*/
var exchange = function(nums) {
let even=[]
let odd=[]
for(let i=0;i<nums.length;i++){
if(nums[i]%2==0){
odd.push(nums[i])
}else{
even.push(nums[i])
}
}
return even.concat(odd)
};
只用一个数组,奇数就加到第一个,偶数就加到最后一个
/**
* @param {number[]} nums
* @return {number[]}
*/
var exchange = function(nums) {
let res=[]
for(let i=0;i<nums.length;i++){
if(nums[i]%2==0){
res.push(nums[i])
}else{
res.unshift(nums[i])
}
}
return res
};
2.双指针
前后各自指定一个指针,有以下四种情况:
1.前奇后偶,前++后--
2.前偶后奇,先交换,再前++后--
3.前奇后奇,前++
4.前偶后偶,后--
/**
* @param {number[]} nums
* @return {number[]}
*/
var exchange = function(nums) {
let start=0,end=nums.length-1;
while(start<=end){
if(nums[start]%2==0&&nums[end]%2!=0){
[nums[start],nums[end]]=[nums[end],nums[start]];
start++;
end--;
}else if(nums[start]%2==0){
end--
}else{
start++
}
}
return nums
};
3.看到别人写的一个很离谱但是又有些道理的代码
/**
* @param {number[]} nums
* @return {number[]}
*/
var exchange = function(nums) {
return nums.sort((a,b)=>b%2-a%2)
};