LeetCode //C - 1122. Relative Sort Array
·
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 do not 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]
Example 2:
Input: arr1 = [28,6,22,8,44,17], arr2 = [22,28,8,6]
Output: [22,28,8,6,17,44]
Constraints:
- 1 <= arr1.length, arr2.length <= 1000
- 0 <= arr1[i], arr2[i] <= 1000
- All the elements of arr2 are distinct.
- Each arr2[i] is in arr1.
From: LeetCode
Link: 1122. Relative Sort Array
Solution:
Ideas:
count numbers first, output numbers in arr2 order, then output remaining numbers from small to large.
Code:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* relativeSortArray(int* arr1, int arr1Size, int* arr2, int arr2Size, int* returnSize) {
int count[1001] = {0};
for (int i = 0; i < arr1Size; i++) {
count[arr1[i]]++;
}
int* ans = (int*)malloc(sizeof(int) * arr1Size);
int idx = 0;
for (int i = 0; i < arr2Size; i++) {
int num = arr2[i];
while (count[num] > 0) {
ans[idx++] = num;
count[num]--;
}
}
for (int num = 0; num <= 1000; num++) {
while (count[num] > 0) {
ans[idx++] = num;
count[num]--;
}
}
*returnSize = arr1Size;
return ans;
}
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)