【LeetCode每日一题】[简单]1122. 数组的相对排序

【LeetCode每日一题】[简单]1122. 数组的相对排序

328. 奇偶链表

1122. 数组的相对排序

算法思想:数组

题目:

在这里插入图片描述

java代码

class Solution {
    
    
    //计数排序
    public int[] relativeSortArray(int[] arr1, int[] arr2) {
    
    
		int[] m = new int[1001];//用来统计arr1中arr2数值出现次数
		int n1 = arr1.length;//arr1长度
		int n2 = arr2.length;//arr2长度
		int[] res = new int[n1];//答案
		int k = 0;
		for (int i = 0; i < n1; i++) {
    
    //用来统计arr1中各个数值出现的频率
			m[arr1[i]]++;
		}
		for (int i = 0; i < n2; i++) {
    
    //根据arr2的顺序以及m中各数出现的频率生成返回数组的前半部分
			while (m[arr2[i]] > 0) {
    
    
				res[k++] = arr2[i];
				m[arr2[i]]--;
			}
		}
		for (int i = 0; i < m.length; i++) {
    
    //将arr2中没有出现的排序加入末尾
        //m从前往后遍历是有序的;直接加入即可
			while (m[i] > 0) {
    
    
				res[k++] = i;
				m[i]--;
			}
		}
		return res;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39457586/article/details/109690884
今日推荐