返回介绍

lcof2 / 剑指 Offer II 075. 数组相对排序 / README

发布于 2024-06-17 01:04:41 字数 3390 浏览 0 评论 0 收藏 0

剑指 Offer II 075. 数组相对排序

题目描述

给定两个数组,arr1 和 arr2

  • 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]

 

提示:

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

 

注意:本题与主站 1122 题相同:https://leetcode.cn/problems/relative-sort-array/ 

解法

方法一

class Solution:
  def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
    mp = {num: i for i, num in enumerate(arr2)}
    arr1.sort(key=lambda x: (mp.get(x, 10000), x))
    return arr1
class Solution {
  public int[] relativeSortArray(int[] arr1, int[] arr2) {
    int[] mp = new int[1001];
    for (int x : arr1) {
      ++mp[x];
    }
    int i = 0;
    for (int x : arr2) {
      while (mp[x]-- > 0) {
        arr1[i++] = x;
      }
    }
    for (int j = 0; j < mp.length; ++j) {
      while (mp[j]-- > 0) {
        arr1[i++] = j;
      }
    }
    return arr1;
  }
}
class Solution {
public:
  vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
    vector<int> mp(1001);
    for (int x : arr1) ++mp[x];
    int i = 0;
    for (int x : arr2) {
      while (mp[x]-- > 0) arr1[i++] = x;
    }
    for (int j = 0; j < mp.size(); ++j) {
      while (mp[j]-- > 0) arr1[i++] = j;
    }
    return arr1;
  }
};
func relativeSortArray(arr1 []int, arr2 []int) []int {
  mp := make([]int, 1001)
  for _, x := range arr1 {
    mp[x]++
  }
  i := 0
  for _, x := range arr2 {
    for mp[x] > 0 {
      arr1[i] = x
      mp[x]--
      i++
    }
  }
  for j, cnt := range mp {
    for cnt > 0 {
      arr1[i] = j
      i++
      cnt--
    }
  }
  return arr1
}

方法二

class Solution:
  def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
    mp = [0] * 1001
    for x in arr1:
      mp[x] += 1
    i = 0
    for x in arr2:
      while mp[x] > 0:
        arr1[i] = x
        mp[x] -= 1
        i += 1
    for x, cnt in enumerate(mp):
      for _ in range(cnt):
        arr1[i] = x
        i += 1
    return arr1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文