按奇偶排序数组

194 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述

  • 给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。
  • 你可以返回满足此条件的任何数组作为答案。
  • 示例:
    • 输入: [3,1,2,4]
    • 输出: [2,4,3,1]
    • 输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。
  • 提示:
    • 1 <= A.length <= 5000
    • 0 <= A[i] <= 5000

二、思路分析:

  • 按照奇偶顺序排序数组,首先需要判断数组的每一项是奇数还是偶数
  • 然后再根据它的奇偶性去排序(插入位置)
  • 所以第一步需要遍历数组中的每一项,判断每一项的奇偶性(0算偶数
  • 第二步,根据奇偶性确定插入位置,这里有两种做法
    • 第一种:如果是偶数,添加到定义好的数组变量的头部,如果是奇数,添加到数组变量的尾部
    • 第二种:定义两个数组变量,一个保存奇数,一个保存偶数,遍历完数组后,利用数组的concat方法将两个数组连接起来,返回一个新数组
      • 也可以不利用concat返回[...letfArr, ...rightArr]

三、AC 代码:

  • 第一种:
function sortArrayByParity(nums: number[]): number[] {
    let result: Array<number> = [];
    nums.forEach(item => {
        if(item % 2 === 0){
            result.unshift(item);
        } else {
            result.push(item);
        }
    })
    return result;
};
  • 第二种:
function sortArrayByParity(nums: number[]): number[] {
    let letfArr: Array<number> = [];
    let rightArr: Array<number> = [];
    nums.forEach(item => {
        if(item % 2 === 0){
            letfArr.push(item);
        } else {
            rightArr.push(item);
        }
    })
    // return [...letfArr, ...rightArr]
    return letfArr.concat(rightArr);
};

四、总结:

  • 题目简单难度,可以优化下执行时间
  • 更多解题方式,移步题解区

image.png