溧阳市建设网站,成都酒店设计十大公司排名,淄博市住房和城乡建设局网站,wordpress客户端5.5找到所有数组中消失的数字#xff0c;链接奉上。 这里简单说一下#xff0c;因为还没有接触到动态内存#xff0c;数据结构#xff0c;所以知识有限#xff0c;也是尽力而为#xff0c;结合题库的评论区找到了适合我的解法#xff0c;以后有机会#xff0c;会补上各种…找到所有数组中消失的数字链接奉上。 这里简单说一下因为还没有接触到动态内存数据结构所以知识有限也是尽力而为结合题库的评论区找到了适合我的解法以后有机会会补上各种解法 方法 暴力循环排序分情况讨论 暴力循环
暴力循环依旧是最容易想到的但是越容易想到的往往更耗费时间也就意味着更容易超出时间界限。 思路 双重for循环外部控制1~n个数内部遍历nums数组两两比较记录没有出现的数字即为消失的数字 代码实现
static int arr[99999];//创建数组
int* finddisappearednumbers(int* nums, int numssize, int* returnsize)
{int count 0;//计数器int n 0;for (int j 1; j numssize; j){count 0;//每次进入要重置for (int i 0; i numssize; i){if (j nums[i]){count;break;}}if (count 0)//为0说明未出现arr[n] j;}*returnsize n;return arr;
}排序分情况讨论
思路 排序是为了让数组有序更好的进行操作 那么分情况讨论是怎么一回事 将1~n设为循环变量i进行遍历 left0设为下标从0开始根据情况left 再将nums[left]与i比较 当inums[left]时left因为会有重复的数字比如1 2 2 2这时可以使用while循环 当inums[left]时将i放入结果数组 注意 数组有时会出现n也就是numssize大于当前数组最大值nums[numssize-1]的情况也就是类似 1 2 2 2的情况所以while中的left会超出界限这时leftnumssize我们将剩下的for循环中未开始的i依次赋值给结果数组 代码实现
int cmp(int* a, int* b)
{return *a - *b;
}
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){qsort(nums,numsSize,sizeof(int),cmp);int* resmalloc(sizeof(int) * numsSize);//结果数组result*returnSize0;int left0;for(int i1;inumsSize;i){if(leftnumsSizei!nums[left])//注意left要放前边防止短路发生{res[(*returnSize)]i;//*returnsize随着结果数组的增加而增加//最后返回的就是数组大小}if(leftnumsSize){res[(*returnSize)]i;}//while要在最后进行因为在前边会改变left//影响两个if的判断while(leftnumsSizeinums[left]){left;}}return res;
}欢迎大家纠错与讨论。