栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据结构与算法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构与算法

面试题 17.04. 消失的数字

链接

数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

示例 1:

输入:[3,0,1]
输出:2

示例 2:

输入:[9,6,4,2,3,5,7,0,1]
输出:8

1.异或法:

利用异或的属性,相同的数字异或为0,相异为1(二进制),且异或满足交换律,利用这两个属性,可以定义一个变量x(初始值为0),将x与数组中的每一个元素进行异或,得到一个数值,然后在与(0-n)的数字进行异或,得到的就是消失的那个数字。

int missingNumber(int* nums, int numsSize){
    int x=0,i;
    for(i=0;i 
2.累加和方法 

计算出数组元素的和,在计算出(0-n)所有元素的和,两者做差得到的就是缺少的那个数字。

int missingNumber(int* nums, int numsSize){
    int sum=0,i,sum2=0;
    for(i=0;i 
3.标定法 

开辟一块内存空间比原先数组空间多一个,遍历原数组,将出现的数字标定为1,并赋值给数组2的对应空间。然后遍历数组2,判断数组中的元素是否为标定的数字,如若不是这返回对应的下标,该值就是缺少的数字。

int missingNumber(int* nums, int numsSize){
    int *nums2=malloc(sizeof(int)*(numsSize+1));
    if(nums2==NULL)
    {
        exit(-1);
    }
    int i;
    for(i=0;i 

以上就是本人知道的解题方法,感谢各位的指正和补充。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298032.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号