js算法_奇偶分割数组

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

分割一个整数数组,使得奇数在前偶数在后。  比如:给定 [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/算法-奇偶分割数组/


一道有意思的面试算法题

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。这道题第一眼看过去,思路挺简单的,我们只需要维护一个对象来记录每一个元素出现的次数,使用元素的值作为key,元素出现的次数作为value。

为什么我认为数据结构与算法对前端开发很重要?

一个具有层级结构的数据,实现这个功能非常容易,因为这个结构和组件的结构是一致的,递归遍历就可以了。但是,由于后端通常采用的是关系型数据库,所以返回的数据通常会是这个样子:前端这边想要将数据转换一下其实也不难,因为要合并重复项

js算法_八皇后问题的JavaScript解法

关于八皇后问题的 JavaScript 解法,八皇后问题是一个以国际象棋为背景的问题,八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为 n×n ,而皇后个数也变成n 。当且仅当n = 1或n ≥ 4时问题有解

js字典对象_js实现字典Dictionary类操作

字典(Dictionary)是一种以 键-值对 形式存储数据的数据结构 ,其实对于javascript来说,字典类(Dictionary)的基础是Array类,js中的Array既是一个数组,同时也是一个字典。字典(Dictionary)类的基础是 Array 类。同之前的我们所看到的数据结构一样,字典类也应该有添加、删除、清空等操作。

js实现链表_javascript中的链表结构

很多编程语言中数组的长度是固定的,就是定义数组的时候需要定义数组的长度,所以当数组已经被数据填满的时候,需要再加入新的元素就很困难。只能说在部分变成语言中会有这种情况,在javascript中和php中数组的长度是可以任意增加的。avascript中有一个很方便的方法splice()方法很方便的就可以添加或删除元素。

js二叉树的遍历算法

二叉树是非常重要的数据结构,其中一棵树最上面的点称为根节点,如果一个节点下面连接多个节点,那么该节点称为父节点,下面的节点称为子节点,二叉树的每一个节点最多有2个子节点,一个节点子节点的个数称为度,二叉树每个节点的度只能是0,1,2中的一个,度为0的节点称为叶节点。

js背包问题算法_JavaScript 背包问题详解

打算好好学一下算法,先拿背包问题入手。最开始的01背包耗时最多,以前只会枚举(就是普通的for循环,暴力地一步步遍历下去),递归与二分,而动态规划所讲的状态表与状态迁移方程为我打开一扇大门。

js多叉树结构的数据,parent表示法转成children表示法

要求是将这个数组转成一个children表示法的对象,即从根节点开始,每个节点存有其子节点数组。转化效果如下(节点必须有个唯一标识符,以下id就是,并且转化前后其他属性保持不变,这里为了显示简洁没有加入其他属性。

js字典树算法_Trie树(字典树)实现与应用

字典树又称Trie树、前缀字,单词查找树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。 字典树是处理字符串常见的一种树形数据结构

js实现:在字符串中找出第一个只出现一次的字符

在给出一个字符串,找出第一个只出现一次的字符。思路分析:可以用对象保存字符出现的次数。将值删除,用 indexOf 查找还有没有相同字符,并查找之前删过的字符,indexOf 的第二个参数,从当前值往后搜索,并查找之前已经查过的字符

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

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯