思路
- 先遍历数组,计算出顺序前缀和的sum以及顺序个数count
- 将数组中大于前缀和sum的数字再单独存放于一个新的数组中,目的就是为了更好的规避中间出现的较小数字
- 判断count值,如果大于1,则证明数组中存在顺序前缀和,如果等于1,则证明数组中没有任何一段连续的数字能够构成顺序前缀和
- 再次遍历新的数组,如果出现了-1(新数组初始化后数组中的50个int类型的值均为-1),则证明在nums数组中最大的数字都无法满足和顺序前缀和相等,则需要加1,即i+sum
int missingInteger(int* nums, int numsSize) {
int i = 0;
int sum = nums[0];
int *tmp=(int *)malloc(sizeof(int)*50);
for(i=0;i<50;i++){
tmp[i]=-1;
}
int count1 = 1;
for (i = 1; i < numsSize; i++)
{
if (nums[i] - nums[i - 1] == 1)
{
sum += nums[i];
count1++;
}
else
break;
}
for (i; i < numsSize; i++)
{
if (nums[i] >= sum)
{
tmp[nums[i]-sum] = nums[i];
}
}
if(count1>1)
i=0;
else
i=1;
for(i;i<numsSize;i++)
{
if(tmp[i]==-1)
break;
}
return i+sum;
}