【leetcode】1122. 数组的相对排序(relative-sort-array)(模拟)[简单]
发布日期:2021-05-13 21:40:29 浏览次数:21 分类:精选文章

本文共 1259 字,大约阅读时间需要 4 分钟。

要解决的问题是对两个数组arr1和arr2进行处理,使得arr1排序后的相对顺序与arr2的相对顺序一致,并将arr1中不在arr2中的元素按升序放在末尾。

思路

  • 统计元素出现次数:首先遍历arr1,使用哈希表记录每个元素的出现次数。
  • 处理arr2中的元素:遍历arr2,对于每个元素,按照哈希表记录的次数,将该元素重复加入结果数组,同时记录该元素已处理。
  • 处理未在arr2中的元素:遍历哈希表,找出未在arr2中的元素,将它们按升序排序后,加入结果数组的末尾。
  • 解决代码

    #include 
    #include
    #include
    #include
    using namespace std;
    vector
    relativeSortArray(vector
    & arr1, vector
    & arr2) { unordered_map
    cnt; for (int x : arr1) { cnt[x]++; } vector
    ans; unordered_set
    flag; for (int x : arr2) { for (int i = 0; i < cnt[x]; ++i) { ans.push_back(x); } flag.insert(x); } vector
    res; for (auto& pair : cnt) { if (flag.find(pair.first) == flag.end()) { for (int i = 0; i < pair.second; ++i) { res.push_back(pair.first); } } } sort(res.begin(), res.end()); ans.insert(ans.end(), res.begin(), res.end()); return ans; }

    代码解释

  • 统计元素出现次数:使用unordered_map遍历arr1,记录每个元素的计数。
  • 处理arr2中的元素:遍历arr2,对于每个元素,重复加入结果数组,次数由哈希表记录,同时记录元素已处理。
  • 处理未在arr2中的元素:遍历哈希表,找出未在arr2中的元素,将它们按升序排序后,加入结果数组的末尾。
  • 这种方法确保了结果数组的相对顺序与arr2一致,并且未在arr2中的元素按升序排列在末尾,满足题目要求。

    上一篇:【leetcode】204. 计数质数(count-primes)(数论)[简单]
    下一篇:【Linux】conda 使用 workflow

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2025年05月04日 18时19分59秒