面试算法75:数组相对排序

题目

输入两个数组arr1和arr2,其中数组arr2中的每个数字都唯一,并且都是数组arr1中的数字。请将数组arr1中的数字按照数组arr2中的数字的相对顺序排序。如果数组arr1中的数字在数组arr2中没有出现,那么将这些数字按递增的顺序排在后面。假设数组中的所有数字都在0到1000的范围内。例如,输入的数组arr1和arr2分别是[2,3,3,7,3,9,2,1,7,2]和[3,2,1],则数组arr1排序之后为[3,3,3,2,2,2,1,7,7,9]。

分析

题目明确提出数组中的数字都在0到1000的范围内。这是一个很明显的提示,据此可以考虑采用计数排序。先统计数组[2,3,3,7,3,9,2,1,7,2]中每个数字出现的次数,发现数字1出现了1次,2出现了3次,3出现了3次,7出现了2次,以及9出现了1次。接下来根据数组[3,2,1]确定的数字顺序,先后输出3个3、3个2、1个1。由于还剩下数字7和9,因此再按照大小输出2个7和1个9。

public class Test {
   
    public static void main(String[] args) {
   
        int[] arr1 = {
   2, 3, 3, 7, 3, 9, 2, 1, 7, 2};
        int[] arr2 = {
   3, 2, 1};
        int[] result = relativeSortArray(arr1, arr2);
        for (int item : result) {
   
            System.out.println(item);
        }
    }

    public static int[] relativeSortArray(int[] arr1, int[] arr2) {
   
        int[] counts = new int[1001];
        for (int num : arr1) {
   
            counts[num]++;
        }

        int i = 0;
        for (int num : arr2) {
   
            while (counts[num] > 0) {
   
                arr1[i++] = num;
                counts[num]--;
            }
        }

        for (int num = 0; num < counts.length; num++) {
   
            while (counts[num] > 0) {
   
                arr1[i++] = num;
                counts[num]--;
            }
        }
        return arr1;
    }
}

相关推荐

  1. 面试算法75数组相对排序

    2023-12-31 18:38:03       35 阅读
  2. 面试算法-79-搜索旋转排序数组

    2023-12-31 18:38:03       17 阅读
  3. 面试算法-75-三数之和

    2023-12-31 18:38:03       16 阅读
  4. 面试算法:归并排序

    2023-12-31 18:38:03       41 阅读
  5. 排序算法面试专用

    2023-12-31 18:38:03       13 阅读
  6. LeetCode-75. 颜色分类【数组 双指针 排序

    2023-12-31 18:38:03       13 阅读
  7. 面试算法72:求平方根

    2023-12-31 18:38:03       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-31 18:38:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-31 18:38:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-31 18:38:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-31 18:38:03       20 阅读

热门阅读

  1. vscode 配置git

    2023-12-31 18:38:03       39 阅读
  2. 【Leetcode Sheet】Weekly Practice 22

    2023-12-31 18:38:03       43 阅读
  3. Python---多进程---多线程

    2023-12-31 18:38:03       37 阅读
  4. vue3 ts面试题 常问面试题(连更中.......)

    2023-12-31 18:38:03       38 阅读
  5. 【Qt-布局】

    2023-12-31 18:38:03       39 阅读
  6. 哈希表:解决冲突的数据结构

    2023-12-31 18:38:03       37 阅读
  7. CNVD漏洞审核类型尺度参考标准

    2023-12-31 18:38:03       33 阅读
  8. 从研究生毕业到工作七年感悟

    2023-12-31 18:38:03       37 阅读
  9. NLP常见问题

    2023-12-31 18:38:03       39 阅读
  10. 2. Mybatis案例(查询)

    2023-12-31 18:38:03       38 阅读