首页 > 试题广场 >

调整数组顺序使奇数位于偶数前面(一)

[编程题]调整数组顺序使奇数位于偶数前面(一)
  • 热度指数:105857 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

数据范围:,数组中每个数的值
要求:时间复杂度 ,空间复杂度
进阶:时间复杂度 ,空间复杂度
示例1

输入

[1,2,3,4]

输出

[1,3,2,4]
示例2

输入

[2,4,6,5,7]

输出

[5,7,2,4,6]
示例3

输入

[1,3,5,6,7]

输出

[1,3,5,7,6]
时间复杂度O(n^2),空间复杂度O(1)
function reOrderArray( array ) {
    let numOfEven = 0;
    for (let i = 0; i < array.length; i++) {
        if (array[i] % 2 === 0) numOfEven++;
    }
    // 记录偶数移动的次数
    let moveTimesOfEven = 0;
    let index = 0;
    // 移动的次数是偶数个数时才能保证偶数顺序和输入一样
    while (moveTimesOfEven < numOfEven) {
        if (array[index] % 2 === 0) {
            let temp = array[index];
            for (let j = index; j < array.length - 1; j++) {
                array[j] = array[j + 1];
            }
            array[array.length - 1] = temp;
            // 当前是偶数时index不加,因为index位置的是下一位移动过来的,继续判断奇偶
            moveTimesOfEven++;
        }
        else{
            index++;
        }
    }
    return array;
}



发表于 2022-09-01 16:29:46 回复(0)
function reOrderArray( array ) {
    return array.filter(it=>it%2===1).concat(array.filter(it=>it%2===0))
}

发表于 2022-04-16 21:20:49 回复(0)
时间复杂度o(n²),空间复杂度o(1)的写法
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @return int整型一维数组
 */
function reOrderArray( array ) {
    // write code here
    let n = 0
    for(let i = 0 ;i < array.length;i++){
        if(array[i] % 2 == 1){
            let temp = array[i]
            for(let j = i ;j > n; j-- ){
                array[j] = array[j - 1]
            }
            array[n] = temp
            n++
        }
    }
    return array
}
module.exports = {
    reOrderArray : reOrderArray
};
发表于 2021-11-27 16:44:44 回复(0)
function reOrderArray( array ) {
   const evenArr = [];
    const oddArr = [];
    array.forEach(item => {
        item % 2 === 0 ? evenArr.push(item) : oddArr.push(item)
    })
    return [...oddArr, ...evenArr]
}

发表于 2021-09-08 14:51:30 回复(0)
//我的思路是将数组中的数分别放到两个奇偶数组里,再合并数组
function reOrderArray(array) {
    // write code here
    let arr1 = [],
        arr2 = [];

    array.forEach((value, index, array) => {

//判断奇偶
        if ((value & 1) == 1) {
            arr1.push(value);
        } else arr2.push(value);
    })

//数组合并
    arr1=arr1.concat(arr2);
    return arr1
}

发表于 2021-08-18 10:34:03 回复(0)
js
function reOrderArray( array ) {
    let i = [],j = [];
    array.forEach(item => {
        item % 2 == 0 ? j.push(item) : i.push(item);
    })
    return [...i,...j]
}
module.exports = {
    reOrderArray : reOrderArray
};

发表于 2021-08-09 20:44:58 回复(0)
难倒不难,主要是怎么样写的才不low,反正我是整了三个数组,偶数一个奇数一个,最后拼在一起。
function reOrderArray( array ) {
      let newArr=[]
      let jArr=[]
      let oArr=[]
      array.forEach((e)=>{
        if (e%2){
          //除完偶数
          oArr.push(e)
        }else {
          jArr.push(e)
        }
      })
      newArr=oArr.concat(jArr)
      return newArr
}

发表于 2021-08-03 15:02:05 回复(0)
function reOrderArray( array ) {
    array.sort((a,b)=>{
    let oddA = Number(a%2==1)
    let oddB = Number(b%2==1)
    return oddA-oddB == 1  ? -1 : 1
    })
    return array
}
module.exports = {
    reOrderArray : reOrderArray
};

发表于 2021-07-15 14:47:43 回复(0)
function reOrderArray( array ) {
    // write code here
    var a=[];
    let len = array.length;
    for(var i=0;i<len;i++){
        if(array[i] % 2 ==1){
            a.push(array[i]);
        }
    }
    for(var i=0;i<len;i++){
        if(array[i] % 2 !==1){
            a.push(array[i]);
        }
    }
    return a;
}

发表于 2021-07-13 17:55:16 回复(0)
array.sort((a,b)=>{
	let aa=a%2;
	let bb= b%2;
	if(aa==bb){
		return 0
	}else{
	return bb-aa
	}
})
return array;

发表于 2021-06-06 16:38:54 回复(0)
let len = array.length;
    let arr1 = [], arr2 = [];
    for (let i = 0; i < len; i++) {
        if (array[i] % 2 == 1) {
            arr1.push(array[i]);
        } else {
            arr2.push(array[i]);
        }
    }
    return arr1.concat(arr2);
JS暴力笨办法
发表于 2021-04-29 09:38:33 回复(0)
function reOrderArray( array ) {
    // write code here
    var arr1 = [];
    var arr2 = [];
    for(var i = 0;i<array.length;i++){
        if(array[i] % 2 != 0){
            arr1.push(array[i]);
        }else{
            arr2.push(array[i]);
        }
    }
    return arr1.concat(arr2);
}

发表于 2021-03-16 21:44:23 回复(0)
由于需要考虑到调整之后的稳定性,因此我们可以使用辅助数组的方式。首先对数组中的元素进行遍历,每遇到一个奇数就将它加入到 奇数辅助数组中,每遇到一个偶数,就将它将入到偶数辅助数组中。最后再将两个数组合并。这一种方法的时间复杂度为 O(n),空间 复杂度为 O(n)。
function reOrderArray( array ) {
    // write code here
    let arr1 = [],arr2 = []
    for(let item of array){
        if(item % 2 == 0) arr2.push(item)
        else arr1.push(item)
    }
    return arr1.concat(arr2)
}

发表于 2021-03-11 17:04:00 回复(0)