ledcode----丢失的数字

博客围绕LeetCode中消失数字的题目展开,介绍三种C语言解法。一是定义数组标记法,二是差值法,通过0到n数字和与数组元素和的差值找丢失数字,三是位运算异或法,利用异或特性找出结果,并给出示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

题目截图:

 题目接口:

第一种解法:

思路:

第二种解法:差值法

思路:

第三种解法:位运算异或法

关于异或操作符的预备知识:

思路:

例子:输入数组[0,1,3]。根据题目要求消失的数字就是2,n=3。

结语:

 


题目截图:

 题目接口:

int missingNumber(int* nums, int numsSize){

}

第一种解法:

思路:

第一步,定义一个长度为10000的数组(题目中的数组长度最大为10000)并将数组中的数据初始化为0。

第二步,将nums中的数据作为下标对arr进行赋值为1的操作。

第三步,对arr进行遍历,当arr[i]==0时成立时返回下标i,这里的i就是缺失的数字。


int missingNumber(int* nums, int numsSize) {
   
    int arr[10000] = { 0 };
    int i = 0;
    for (i = 0;i < numsSize;i++) {
        arr[nums[i]] = 1;
    }
    for (i = 0;i < numsSize + 1;i++) {
        if (arr[i] == 0)
            break;
    }
    return i;
}

第二种解法:差值法

思路:

第一步,对0~n的数字进行加和

第二步,对数组中的元素进行加和

第三步,返回两个数的差值,这个差值就是丢失的数字。

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

第三种解法:位运算异或法

关于异或操作符的预备知识:

1.0^(任何数)=任何数   0^1=1;

2.两个相等的数字异或自己=0  1^1=0;

3.异或操作支持交换律。

思路:

第一步,先定义一个x=0

第二步,使用x来异或数组中每一个元素,并将x赋值为x^nums[i].

第三步,用第一个循环中得到的数来异或0~n的数,并对x重新赋值

第四步,两循环结束以后得到的x的值就是丢失的数字。

例子:输入数组[0,1,3]。根据题目要求消失的数字就是2,n=3。

执行程序后的操作:x=0^0^1^3^0^1^2^3=0^0^0^1^1^2^3^3=0^2=2

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

结语:

小牛儿今天的分享就到这里了,如果有错误的话请指正。如果对你的学习有帮助的话,请给小牛儿来个三连吧。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值