LeetCode题练习与总结:丢失的数字--268

294 篇文章 0 订阅
79 篇文章 0 订阅

一、题目描述

给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。

示例 1:

输入:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。

示例 2:

输入:nums = [0,1]
输出:2
解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。

示例 3:

输入:nums = [9,6,4,2,3,5,7,0,1]
输出:8
解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。

示例 4:

输入:nums = [0]
输出:1
解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。1 是丢失的数字,因为它没有出现在 nums 中。

提示:

  • n == nums.length
  • 1 <= n <= 10^4
  • 0 <= nums[i] <= n
  • nums 中的所有数字都 独一无二

二、解题思路

  1. 首先,我们可以利用等差数列求和公式计算 [0, n] 范围内所有数的和,其中 n 是数组 nums 的长度。
  2. 然后,我们遍历数组 nums,将每个元素从等差数列的和减去,剩下的数就是缺失的数字。

三、具体代码

class Solution {
    public int missingNumber(int[] nums) {
        // 计算等差数列的和,即[0, n]的和
        int n = nums.length;
        int total = (0 + n) * (n + 1) / 2;

        // 遍历数组,减去每个元素
        for (int num : nums) {
            total -= num;
        }

        // 剩下的数就是缺失的数字
        return total;
    }
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 计算等差数列的和:这一步是一个常数时间的操作,因为它只涉及几个基本的算术运算(加法、乘法和除法),与输入数组 nums 的大小无关。因此,这一步的时间复杂度是 O(1)。

  • 遍历数组 nums:这一步涉及一个循环,该循环会遍历数组中的每个元素一次。如果数组的大小是 n,那么循环将执行 n 次。因此,这一步的时间复杂度是 O(n)。

综合上述两步,算法的总时间复杂度是 O(n),因为 O(1) + O(n) = O(n)。

2. 空间复杂度
  • 变量 n 和 total:这两个变量都是基本数据类型(整型),它们占用的空间不随输入数组 nums 的大小而变化。因此,它们的空间复杂度是 O(1)。

  • 输入数组 nums:虽然这个数组本身在算法中是输入,但是空间复杂度分析通常只考虑算法额外使用的空间。因此,输入数组的空间不计入算法的空间复杂度。

综上所述,算法的总空间复杂度是 O(1),因为它只使用了固定数量的额外空间。

五、总结知识点

  1. 类定义 (class Solution): 这是Java中的类定义语法,表明我们定义了一个名为 Solution 的类。

  2. 方法定义 (public int missingNumber(int[] nums)): 这是Java中定义方法的语法,表明我们定义了一个名为 missingNumber 的公共方法,它接受一个整数数组 nums 作为参数,并返回一个整数。

  3. 数组长度获取 (int n = nums.length): 这是获取数组长度的方法,length 是数组的一个属性,它返回数组的元素数量。

  4. 算术运算 (int total = (0 + n) * (n + 1) / 2): 这里使用了加法、乘法和除法来计算等差数列的和,遵循算术运算的优先级规则。

  5. 循环遍历 (for (int num : nums)): 这是一个增强型 for 循环,用于遍历数组 nums 中的每个元素,每次循环将数组中的一个元素赋值给变量 num

  6. 赋值运算 (total -= num): 这是赋值运算符的用法,它等同于 total = total - num,用于从 total 中减去当前遍历到的数组元素。

  7. 返回语句 (return total;): 这是Java中返回方法结果的语法,表示将 total 的值作为方法的返回值。

  8. 整型数据类型 (int): 在这个方法中,所有的变量都是 int 类型,这是Java中用于表示整数的原始数据类型。

  9. 逻辑顺序 (// 注释): 代码中使用了注释来解释代码的逻辑,虽然注释不是Java语言的一部分,但它们对于代码的可读性和维护性是非常重要的。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
weixin102旅游社交微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直学习永不止步

谢谢您的鼓励,我会再接再厉的!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值