leetcode 题号1122 Relative Sort Array

查看题目详情可点击此处

题目

Given two arrays arr1 and arr2, the elements of arr2 are distinct, and all elements in arr2 are also in arr1.

Sort the elements of arr1 such that the relative ordering of items in arr1 are the same as in arr2. Elements that don’t appear in arr2 should be placed at the end of arr1 in ascending order.

Example 1:

Input: arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
Output: [2,2,2,1,4,3,3,9,6,7,19]

Constraints:

  • arr1.length, arr2.length <= 1000
  • 0 <= arr1[i], arr2[i] <= 1000
  • Each arr2[i] is in arr1.
  • Each arr2[i] is distinct.

解题思路

根据题目可知,被排序的数组 arr1 会被分为两块以不同的排序方式进行排序再组合,完成整个数组的排序。排序完成的数组前半部分是根据关联子数组 arr2 中的元素顺序排序,arr2 的元素在 arr1 都有对应数据,arr1 中会有重复数据存在的情况,arr2 中的数据都是唯一的,arr1 与 arr2 中对应不上的元素根据从小至大的顺序排列。

我是先记录 arr2 中元素分别在 arr1 中出现的次数,并且将这些元素都交换至 arr1 的靠前部分,交换结束后 arr1 的靠后部分就是与 arr2 中元素对应不上的元素,我们可以对这部分元素按从小到大排序,此时记录的 arr2 元素分别在 arr1 中出现的次数就派上用场,根据元素在 arr2 中的顺序以及在 arr1 中出现的次数(其实就是个数)在 arr1 的前部分进行填充,最后 arr1 就是题目中需要的结果。

代码实现

代码中使用 relativeSort 方法进行题目要求的排序。

public class RelativeSortArray {
   
    public static int[] relativeSort(int[] array, int[] relative) {
   
        Map<Integer, Integer> relativeMap = generateRelativeMap(relative);
        int relativeIdx = filterRelativeArea
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值