前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【05】消失的数字

【05】消失的数字

作者头像
大耳朵土土垚
发布2024-03-16 11:31:56
810
发布2024-03-16 11:31:56
举报
文章被收录于专栏:c/c++

hellohello~这里是土土数据结构学习笔记🥳🥳

1.消失的数字分析

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

思路1: 先求出数组所有数的和sum1,因为是0~n连续的,只要一个数没有两个,所有我们求出所有两个0 ~n的数的和sum2,再将它们相减即可得到消失的数字🥳🥳

图解如下:

思路2:

利用位操作符来求解,详情点击这里查看: 位与移位操作符详解 按位异或操作符:相同为假,相异为真 而两个相同的数字按位异或得出的结果却是0,因为它们所有位都相同

2.消失的数字完整代码求解

方法一:

代码语言:javascript
复制
int missingNumber(int* nums, int numsSize)
{
int sum = 0;
for(int i = 0; i<numsSize;i++)//数组所有数求和
{
    sum+=*(nums+i);
}
for(int i = 0; i<=numsSize;i++)//假设0~n的数都有两个
{
    sum-=i;//少了一个数的和减去没有少的得到消失的数字的负数
}
return -sum;//返回相反数即可
}

结果如下:

这里的时间复杂度为O(n),符合题意🥳🥳,上面for循环为n,下面也为n,加起来2n,也就是O(n).

方法二:

代码语言:javascript
复制
int missingNumber(int* nums, int numsSize)
{
    int res = 0;
    for (int i = 0; i < numsSize; i++) 
    {
        res ^= nums[i];
    }
    for (int i = 0; i <= numsSize; i++) 
    {
        res ^= i;
    }
        
    return res;
}

同样这里的时间复杂度为O(n),符合题意🥳🥳,上面for循环为n,下面也为n,加起来2n,也就是O(n).

3.结语

✨✨以上就是消失的数字的两种题解啦~ 一种是求和求解,另一种是利用按位异或的特点来求解,两种方法有异曲同工之处,并且时间复杂度都为O(n),完全符合题意,大家都get到了吗?🥰🥰 以上就是C语言消失的数字所有内容啦~ 大家有什么问题或者更好的方法欢迎写在评论区或私信我哦~ 完结撒花~🥳🥳🎉🎉🎉

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.消失的数字分析
  • 2.消失的数字完整代码求解
  • 3.结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档