zoukankan      html  css  js  c++  java
  • LeetCode 1122. 数组的相对顺序

    题目描述

    给你两个数组,arr1arr2

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

    示例:

    输入: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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/relative-sort-array

    思路解析

    arr1中的数字可以分为两部分,第一部分为在 arr2 中出现过的数字,第二部分为 arr2 中未出现的数字。
    使用一个哈希表来存储 arr1 中每个元素出现的次数,然后遍历 arr2 数组,可以按 arr2 中相对顺序对 arr1 中第一部分的数字完成排序。
    再将第二部分的数字排序即可。

    代码实现

    class Solution {
    public:
        vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
            unordered_map<int, int> dict;
            vector<int> result;
            for(int num : arr1)
                dict[num]++;
            for(int num : arr2) {
                while(dict[num] > 0) {
                    result.push_back(num);
                    dict[num]--;
                }
            }
            int ordered_num = result.size();
            for(auto p : dict) {
                while(p.second > 0) {
                    result.push_back(p.first);
                    p.second--;
                }
            }
            sort(result.begin() + ordered_num, result.end());
            return result;
        }
    };
    
  • 相关阅读:
    CSS 层叠样式表
    一. 图论
    二. log4j配置文件
    三.注解
    3. Map与Tuple
    MappedByteBuffer读写文件
    2. scala中的数组
    1.scala语法
    二. 模式匹配
    一.算法的数学基础
  • 原文地址:https://www.cnblogs.com/xqmeng/p/13973437.html
Copyright © 2011-2022 走看看