js算法_奇偶分割数组

时间: 2018-11-07阅读: 1217标签: 算法

分割一个整数数组,使得奇数在前偶数在后。  比如:给定 [1, 2, 3, 4],返回 [1, 3, 2, 4]。


增加一下难度:

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


思路分析:

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

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


代码实现:

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]));


2、乱序数组,排序+取奇数偶数

这种方法无疑是更好的解决方法,事实上涉及排序最好都是使用sort进行排序

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])
);


来源链接:http://obkoro1.com/2018/11/04/算法-奇偶分割数组/


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1278

关闭

Js全排列的六种算法具体实现

六种算法有些是对位置进行排列,例如回溯、排序等,因为这样可以适应各种类型的元素,而非要求待排列元素一定是数字或字母等

JavaScript 面试中常见算法问题详解

所谓提升,顾名思义即是 JavaScript 会将所有的声明提升到当前作用域的顶部。这也就意味着我们可以在某个变量声明前就使用该变量,不过虽然 JavaScript 会将声明提升到顶部,但是并不会执行真的初始化过程。

RSA 背后的算法

随着科技发展,计算能力越来越强,特别是量子计算的兴起,我们对超大质数的位数要求也越来越高,512 bit 的 RSA 已经被破解,而 1024 bit 也已经摇摇欲坠,现阶段 2048 bit 长度还是安全的,可是未来,谁又知道呢?

js求数组中的最大差值的方法总汇

有一个无序整型数组,如何求出这个数组中最大差值。(例如:无序数组1, 3, 63, 44最大差值是 63-1=62)。实现原理:遍历一次数组,找到最大值和最小值,返回差值

用 JavaScript 实现链表

单链表是表示一系列节点的数据结构,其中每个节点指向链表中的下一个节点。 相反,双向链表具有指向其前后元素的节点。与数组不同,链表不提供对链表表中特定索引访问。

JS数据结构与算法_集合&字典

集合set是一种包含不同元素的数据结构。集合中的元素成为成员。集合的两个最重要特性是:集合中的成员是无序的;集合中不允许相同成员存在,计算机中的集合与数学中集合的概念相同,有一些概念我们必须知晓:

动态规划解题思路

算法能力就是程序员的内力,内力强者对编程利剑的把控能力就更强。动态规划就是,通过递推的方式,由最基本的答案推导出更复杂答案的方法,直到找到最终问题的解。

JavaScript十大排序必修算法

冒泡排序通过相邻元素的比较和交换,使得每一趟循环都能找到未有序数组的最大值或最小值,双向冒泡普通的冒泡排序在一趟循环中只能找出一个最大值或最小值,双向冒泡则是多一轮循环既找出最大值也找出最小

Js实现kmp算法_字符串查找算法

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息

原生js实现冒泡排序算法,javascript冒泡排序

javascript冒泡排序的实现,冒泡排序是一个非常常见的排序算法,对于一个数组,每趟排序时依次比较两个相邻的数,如果他们的顺序错误就交换两数位置。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!