作者:冷尔岚钰_820 | 来源:互联网 | 2023-06-08 18:33
题目
给你两个数组,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]
提示:
arr1.length, arr2.length <&#61; 1000
0 <&#61; arr1[i], arr2[i] <&#61; 1000
arr2 中的元素 arr2[i] 各不相同
arr2 中的每个元素 arr2[i] 都出现在 arr1 中
链接&#xff1a;https://leetcode-cn.com/problems/relative-sort-array
解题记录
- 通过计数排序统计arr1中各个数据的出现次数
- 通过arr2中顺序获取获取个数&#xff0c;然后通过个数填到arr1中&#xff0c;然后设置count为0
- 之后再将counter中不是0的填到arr1中
public class Solution {public int[] relativeSortArray(int[] arr1, int[] arr2) {int[] counter &#61; new int[1001];for (int i : arr1) {counter[i]&#43;&#43;;}int idx &#61; 0;for (int i : arr2) {for (int j &#61; 0; j < counter[i]; j&#43;&#43;) {arr1[idx&#43;&#43;]&#61;i;}counter[i] &#61; 0;}for (int i &#61; 0; i < counter.length; i&#43;&#43;) {if (counter[i] !&#61;0) {for (int i1 &#61; 0; i1 < counter[i]; i1&#43;&#43;) {arr1[idx&#43;&#43;] &#61; i;}}}return arr1;}
}