题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
我的思路
一开始以为题目不能新建一个空数组,就划分了四种情况:1.奇偶(奇数在奇数区,偶数在偶数区),这种情况就不变。2.偶奇,这种情况互换。3.奇奇,转换成奇偶。4.偶偶,也转换成奇偶。
但是奇奇和偶偶的情况整个数组没有多余的位置放置被换了的数字,同时指针必须向前走,因此已经被判断过的数字最好也不要更改。所以做不出来!
题解
看了一眼题解,发现是可以使用新数组的,于是就简单了!!
我的代码如下:就是新建一个数组,奇数放前面,偶数倒着放后面即可,就让slow从0到len-1,fast从len-1回0。
/**
* @param {number[]} nums
* @return {number[]}
*/
var exchange = function(nums) {
let len=nums.length;
let fast=len-1,slow=0,temp=0;
const arr=new Array(len);
while(temp<len)
{
arr[temp]=0;
temp++;
}
for(let i=0;i<len;i++){
if(nums[i]%2==0)
{
//偶数
arr[fast]=nums[i];
fast--;
}
else{
//奇数
arr[slow]=nums[i];
slow++;
}
}
console.log(arr);
return arr;
};
官方题解
var exchange = function(nums) {
const n = nums.length;
const res = new Array(n).fill(0);
let left = 0, right = n - 1;
for (const num of nums) {
if (num % 2 === 1) {
res[left++] = num;
} else {
res[right--] = num;
}
}
return res;
};
新建空数组的方式是直接fill(0),比我用while的方法简洁多了,学会了