首页 > 技术文章 > 学习1day

nekoluv 2021-10-10 14:18 原文

oj 1st题

image


解法

解法一:(求和)

1.求已缺失数组的和为num2,和完整数组的和为num1
2.num1-num2即为已缺失的数
代码尝试

查找错误
1.开始想的是numSize的前要不要加等于号
numSize=5
nums[0,3,5,4,1]

num [0,1,2,3,4,5]
没有找到错误

2.num1和num2没有定义初始值
int num1=0;int num2 =0;

解法二(异或)

思路:
1.x=0;
2.x在跟0-n的数异或
3.x与数组中的值异或
4.return x;x返回的值就是消失的那个数

了解异或运算

a^a=0; (自己和自己异或等于0)

a^0=a; (任何数字和零异或还是它本身)

abc=acb; (异或运算具有交换率)
看的他人的csdn上面是这样解释的{
相当于x=0nums[i]i
当num【i】与i相等时,异或为零,除了缺失的数,其他的数字都有伴,所以缺失数字最后会被剩下,赋于x,然后return x,该数组缺失数字就找到了

第一个for循环把除缺失数以外的其他数一个个拎出来,拎出来的一个个去第二个for循环中和【0~n】异或,找到和自己相同的数,便被异或为0

最终x=0消失的数字000000000.......^0

于是消失的数字便找到了}

想要详细地了解异或的过程,我就试着在循环中的每次运算后加“printf”输出值

推荐阅读