消失的数字(涉及时间复杂度的编写代码题)

思路一:先将数组nums排序,从0开始,由小到大,然后用后面一个数减去前面一个数,如果差值为2(正常差值为1) 那么就找到这缺失的数字

c语言中有个快排函数qsort可对数组进行排序

注意到qsort函数中有四个参数

示例: 

#include <stdio.h>
#include <stdlib.h> 

运行结果:

而由于快排函数qsort的时间复杂度为 

 是大于O(n),所以此方法不符题意。

思路二:可求0~n的累加和,然后减去数组所有元素的和,得到的值就为缺失的数字

程序示例:

 此方法

是比较合适的方法。

思路三:如果数组中值是x,就在另一个数组中第x个位置存储该数值

程序示例: 

此方法符合题意,但是不如思路二好

思路四:首先定义一个变量x,然后赋值0,先让x跟0~n所有的数异或

异或运算符是指: 参加运算的两个二进位同号,则结果为0(假);异号则为1(真)。即 0∧0=0,0∧1=1, 1^0=1,1∧1=0。

0异或任何数,其结果=任何数

1异或任何数,其结果=任何数取反

异或运算符的特点是:数a两次异或同一个数b(a=a^b^b)仍然为原值a.

(除此之外还可以实现两个数的交换:

a=a∧b;
b=b∧a;
a=a∧b;

x再跟数组中的每个数异或,最后得到的x值就是缺失的数字

程序示例:

此方法时间复杂度为O(n),符合题意

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值