奇偶分割数组

难度:简单

描述:

分割一个整数数组,使得奇数在前偶数在后。

样例:

给定 [1, 2, 3, 4],返回 [1, 3, 2, 4]。

增加一下难度:

给定乱序数组:[2, 5, 1, 6, 3, 4],返回[1, 3, 5, 2, 4, 6]

思路分析:

排序好的数组:找到奇数进行操作。

乱序的数组:使用sort方法进行排序+提取奇数

代码模板:

const partitionArray = arr => {};
1

想一想再看答案

想一想再看答案

想一想再看答案

代码:

  1. 排序好的数组找到奇数进行操作
const partitionArray = arr => {
  let num = arr.length - 1;
   // 其实如果是乱序数组,可以在这里使用sort将数组排序好再走下面那部分也可以
  // 倒序遍历
  for (let i = num; i >= 0; i--) {
    if (arr[i] % 2 !== 0) {
      let item = arr.splice(i, 1); // 将当前值取出来
      arr.unshift(item[0]); // 添加到首位
    }
  }
  return arr;
};
console.log('输出', partitionArray([1, 2, 3, 4]));
1
2
3
4
5
6
7
8
9
10
11
12
13
  1. 乱序数组,排序+取奇数偶数

这种方法无疑是更好的解决方法,事实上涉及排序最好都是使用sort进行排序,对 sort 不熟的,可以看下之前写的这篇数组 API 解析合集

const partitionArray = arr => {
  return arr.sort((a, b) => {
    if (a % 2 !== 0 && b % 2 !== 0) {
      // 当两个数都是奇数的情况下 按大小排序
      return a - b;
    } else if (a % 2 === 0 && b % 2 === 0) {
      // 当两个数都是偶数的情况下也是按大小排序
      return a - b;
    } else if (a % 2 !== 0) {
      // 当a是奇数 要排在b的前面
      return -1;
    } else if (b % 2 !== 0) {
      // 当b是奇数 排在a的前面
      return 1;
    }
  });
};
console.log(
  '输出',
  partitionArray([1, 2, 3, 4]),
  partitionArray([2, 5, 1, 6, 3, 4])
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

鼓励我一下:

觉得还不错的话,给我的项目点个star

Last Updated: 11/4/2018, 3:49:26 PM