LeetCode - 268. Missing Number

发布于 2024-07-17 09:44:54 字数 1514 浏览 15 评论 0

题目

解析

题目要求在 O(n) 时间和 O(1) 空间内完成。
也是一个很有意思的题目,简单的想法:

  • 用一个变量 sumAll 记录包含没有丢失的那个数的所有的和(也可以用等差数列求和公式求出);
  • 然后求出数组的和 sum ,结果就是 sumAll - sum

更好的解法,利用亦或的性质:

利用第四条性质,循环亦或 xor = xor ^ (i+1) ^ nums[i] 其中没有出现的数就会剩下来。

class Solution {
    public int missingNumber(int[] nums) {
        int sumAll = 0, sum = 0;
        for(int i = 0; i < nums.length; i++){
            sumAll += (i+1);
            sum += nums[i];
        }
        return sumAll-sum;
    }
}

用等差数列求和公式求出 sumAll

class Solution {
    
    public int missingNumber(int[] nums) {
        int sumAll = (0+nums.length)*(nums.length+1)/2; //等差数列
        int sum = 0;
        for(int i = 0; i < nums.length; i++)
            sum += nums[i];
        return sumAll-sum;
    }
    
}

更加巧妙的方式,利用异或运算:

class Solution {

    public int missingNumber(int[] nums) {
        int xor = 0;
        for(int i = 0; i < nums.length; i++)
            xor = xor ^ (i+1) ^ nums[i];
        return xor;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

停滞

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

lee_heart

文章 0 评论 0

往事如风

文章 0 评论 0

春风十里

文章 0 评论 0

纸短情长

文章 0 评论 0

qq_pdEUFz

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文