1122 数组的相对排序给你两个数组arr1 和 arr2arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中。对 arr1 中的元素进行排序使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。c语言
/**
- Note: The returned array must be malloced, assume caller calls free(). / int relativeSortArray(int* arr1, int arr1Size, int* arr2, int arr2Size, int* returnSize){ int freq[1001] = {0}; // 频率数组,保存arr1中每个元素出现的次数 int* res = (int*)malloc(sizeof(int) * arr1Size); // 结果数组 *returnSize = arr1Size; // 返回结果的长度 int k = 0; // 结果数组当前下标 // 先统计arr1中每个元素出现的次数 for(int i = 0; i < arr1Size; i++){ freq[arr1[i]]++; } // 遍历arr2,将arr1中在arr2中出现的元素按照arr2的顺序放入结果数组中 for(int i = 0; i < arr2Size; i++){ while(freq[arr2[i]] > 0){ res[k++] = arr2[i]; freq[arr2[i]]--; } } // 遍历arr1,将剩余元素按照升序放入结果数组中 for(int i = 0; i <= 1000; i++){ while(freq[i] > 0){ res[k++] = i; freq[i]--; } } return res;
原文地址: https://www.cveoy.top/t/topic/e8QM 著作权归作者所有。请勿转载和采集!