2996.大于等于顺序前缀和的最小整数

思路

  1. 先遍历数组,计算出顺序前缀和的sum以及顺序个数count
  2. 将数组中大于前缀和sum的数字再单独存放于一个新的数组中,目的就是为了更好的规避中间出现的较小数字
  3. 判断count值,如果大于1,则证明数组中存在顺序前缀和,如果等于1,则证明数组中没有任何一段连续的数字能够构成顺序前缀和
  4. 再次遍历新的数组,如果出现了-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;


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值