前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【一天一大 lee】数组的相对排序 (难度:简单) - Day202011124

【一天一大 lee】数组的相对排序 (难度:简单) - Day202011124

作者头像
前端小书童
发布2020-11-19 14:55:18
3020
发布2020-11-19 14:55:18
举报
文章被收录于专栏:前端小书童前端小书童

题目:

给你两个数组,arr1 和 arr2,

  • arr2 中的元素各不相同
  • arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。

示例:

代码语言:javascript
复制
输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
输出:[2,2,2,1,4,3,3,9,6,7,19]

提示:

  • arr1.length, arr2.length <= 1000
  • 0 <= arr1[i], arr2[i] <= 1000
  • arr2 中的元素 arr2[i] 各不相同
  • arr2 中的每个元素 arr2[i] 都出现在 arr1 中

抛砖引玉

  • 先遍历arr1通过哈希记录arr2元素及元素个数
  • 声明两个新数组:
    • 一个新数组存放arr1中不存在arr的元素:arr;
    • 另外一个用于返回结果:_result;
  • 遍历arr2,每个元素位置用map中存放的集合代替存到结果数组中,并且清除已经处理的哈希
  • 对map中未处理的集合(这部分就是arr1独有的元素),存放到arr中,并且对arr排序
  • 合并arr和_result

抛砖引玉

代码语言:javascript
复制
/**
 * @param {number[]} arr1
 * @param {number[]} arr2
 * @return {number[]}
 */
var relativeSortArray = function(arr1, arr2) {
  let map = new Map(),
    _result = [],
    arr = [];
// 使用哈希记录arr1中每个元素的集合
  for (let i = 0; i < arr1.length; i++) {
    if (map.has(arr1[i])) {
      map.get(arr1[i]).push(arr1[i])
    } else {
      map.set(arr1[i], [arr1[i]])
    }
  }
  // 按照arr2元素顺序存放哈希arr对应的集合
  for (let i = 0; i < arr2.length; i++) {
    if (map.has(arr2[i])) {
      _result = _result.concat(map.get(arr2[i]))
      map.delete(arr2[i])
    }
  }
  // 存放arr1中独有的元素
  for (let [key, value] of map.entries()) {
    arr = arr.concat(value)
  }

  arr.sort((a, b) => a - b)
  return _result.concat(arr)
};
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小书童 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:
  • 抛砖引玉
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档