前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode268. Missing Number解题

LeetCode268. Missing Number解题

作者头像
vincentbbli
发布2021-08-18 15:38:04
2340
发布2021-08-18 15:38:04
举报
文章被收录于专栏:vincent随笔vincent随笔

Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.

For example, Given nums = [0, 1, 3] return 2.

Note: Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?

Credits: Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

题目的大意是:给你一个数组,里面的元素是从0,1,2,……n这n+1个数字中取出n个来构成的,也就意味着有一个数字是缺失的,你要找到这个数字 题目有个特别要求:你要在O(n)时间复杂度内解决这个问题,并且只能用O(1)的空间复杂度。有的同学就会问这个O(1)的空间复杂度,也就是常量额外空间复杂度是什么,这个就是说你的额外空间必须是常量个,不能跟问题的规模n相关,你可以设置1个int变量也可以设置100个int变量,但是不能用一个长度为跟输入数组长度一样的int数组

分析

既然数组里的元素是从0到n无重复的取,那就用等差数列来算,先算出给定数组所有的数的和,再跟0到n的等差数列的和相比,差的值就是缺失的数字。

代码语言:javascript
复制
class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int i;
        int sum=0;
        int stdSum;
        int size;

        size=nums.size();

        //count sum
        for(i=0;i//count the standard sum
        if(size%2){//odd
            stdSum=(size/2+1)+((size-1)*(size+1))/2;
        }else{//even
            stdSum=(size/2)*(size+1);
        }

        return stdSum-sum;
    }
};

更好的算法

这个我一时还看不懂,有懂的同学欢迎留言分享

代码语言:javascript
复制
public int missingNumber(int[] nums) {

        int rt = nums.length;

        for (int i = 0; i < nums.length; i++) {
            rt = rt ^ nums[i] ^ i;
        }

        return rt;
    }

*来自leetCode 268 Missing Number @_我们的存在

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析
  • 更好的算法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档