1122. 数组的相对排序 Relative Sort Array

    技术2022-07-11  115

    题目 https://leetcode-cn.com/problems/relative-sort-array/

    我的不咋地,还是题解的好

    /** * Note: The returned array must be malloced, assume caller calls free(). */ int search(int* nums,int left,int right,int target) { int middle; while(left<=right) { middle = (left+right)/2; if(nums[middle] == target) { left = middle; break; } else if(nums[middle] > target) { right = middle-1; } else { left = middle+1; } } return left; } int* relativeSortArray(int* arr1, int arr1Size, int* arr2, int arr2Size, int* returnSize){ int *returnNums = NULL; *returnSize=arr1Size; if(arr1Size == 0) return returnNums; returnNums = malloc(sizeof(int)*(arr1Size)); int index[1001],count[1001]; memset(index,0xff,sizeof(index)); memset(count,0,sizeof(count)); int left=arr1Size,right=arr1Size-1; int i,j,k; for(i=0;i<arr2Size;i++) { index[arr2[i]] = i; } for(i=0;i<arr1Size;i++) { if(index[arr1[i]] != -1)//in arr2 { count[arr1[i]]++; } else//not in arr2 { j = search(returnNums,left,right,arr1[i]); if(j!=left)//不是最左边的,需要位移 { memmove(&returnNums[left-1],&returnNums[left],sizeof(int)*(j-left)); } left--; j--; returnNums[j]=arr1[i]; } } for(i=0,j=0,k=0;i<arr2Size;i++) { for(j=0;j<count[arr2[i]];j++) { returnNums[k++]=arr2[i]; } } return returnNums; }

     

    Processed: 0.012, SQL: 9