配列内の欠落している数値をすべて見つけます。リンクはここにあります。
ここで簡単に言っておきますが、私はまだ触ったことがないので知識が限られており、自分に合ったものを見つけるために
动态内存,数据结构
最善を尽くしました。将来機会があれば、さまざまな解決策を追加します。结合题库的评论区
解法
暴力の連鎖
やはり暴力の連鎖が一番考えやすいですが、簡単であればあるほど時間がかかり、タイムリミットを超えやすくなります。
アイデア:
二重
for
サイクル、外部控制1~n
数値、内部遍历nums
配列、2 つずつ比较
、记录
表示されない数は消える数です
コード:
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;
}
状況別の整理+ディスカッション
アイデア:
ソートというのは配列を整理して動作をよくするためのもの
で、状況に応じて議論するというのはどういうことなのかというと、それをループ変数に
してトラバースして添え字にして、nums[left] と iを比較するというものです。このとき、例えば数字の繰り返しがあるので、このときはwhileループを使うとよいです。そのときは、結果の配列に入れられます。caseなので、左はinです。 while は制限を超えます。この時点で、残りの for ループ内の開始されていない値を結果の配列に順番に代入します。1~n
i
left=0
0
left++
i==nums[left]
left++
1 2 2 2
i!=nums[left]
i
numssize
nums[numssize-1]
1 2 2 2
left==numssize
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* res=malloc(sizeof(int) * numsSize);//结果数组,result
*returnSize=0;
int left=0;
for(int i=1;i<=numsSize;i++)
{
if(left<numsSize&&i!=nums[left])//注意:left要放前边,防止短路发生
{
res[(*returnSize)++]=i;
//*returnsize随着结果数组的增加而增加,
//最后返回的就是数组大小
}
if(left==numsSize)
{
res[(*returnSize)++]=i;
}
//while要在最后进行,因为在前边会改变left
//影响两个if的判断
while(left<numsSize&&i==nums[left])
{
left++;
}
}
return res;
}
誰でも間違いを修正したり議論したりすることを歓迎します。