元素个数和数据范围一致,这不又是用复合数组吗,一个数组的值作为另一个数组的下标,用作计数或标记。
int* findDisappearedNumbers(int* nums, int numsLen, int* returnSize ) { int mark[10001] = {0}; //标记数组 int* ret = (int*)malloc(sizeof(int) * 10001); //用指针定义返回数组 int i = 0; for(i = 0; i<numsLen; i++){ mark[nums[i]] = 1; //把nums数组中出现过的数在mark数组中标记为1 } int j = 0; for(i = 1; i<=numsLen; i++){ //遍历标记数组,元素个数和nums数组一样 if(mark[i] == 0) //有标记=0表示没有出现过 ret[j++] = i; //那么就记录在返回数组里 } *returnSize = j; //j即返回数组的长度 return ret; }