小白刷题力扣-面试题 17.04. 消失的数字

79 阅读1分钟

[题目链接](面试题 17.04. 消失的数字 - 力扣(LeetCode))

思路1:遍历数组中的和,计为sum1,用sum=0+1……+n; p=sum-sum1,即丢失的数字为p的值

int missingNumber(int* nums, int numsSize){
    int sum=0;
    for(int i=0;i<=numsSize;i++){
        sum+=i;
    }
    int sum1=0;
    for(int i=0;i<numsSize;i++){
        sum1+=nums[i];
    }
    return sum-sum1;
}

思路2:利用桶排序

int missingNumber(int* nums, int numsSize){
    int a[100000]={0};   //将数组a全都初始化为0
    for(int i=0;i<numsSize;i++){
        a[nums[i]]=1;    //数组nums出现的数字在对应的桶里标记为1(即数组a)
    }
    int temp;              
    for(int i=0;i<=numsSize;i++){
        if(a[i]==0){
            temp=i;
            break;
        }
    }
    return temp;
}

思路3:异或的办法(这个方法是从其他视频里学来的,分享一下)异或的特点:同0异1, 所以,给一个值x=0,x先跟[0,n]的所有值异或,x再跟数组中的每个异或,最后x即缺失的数字(时间复杂度为O(N))

int missingNumber(int* nums, int numsSize){
     int x=0;  
    for(int i=0;i<=numsSize;i++){
        x^=i;
    }
    for(int i=0;i<numsSize;i++){
        x^=nums[i];
    }
    return x;  
}