LeetCode简单题之丢失的数字

news/2024/11/25 15:34:43/

题目

给定一个包含 [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 中的所有数字都 独一无二
来源:力扣(LeetCode)

解题思路

  题目比较简单,可以先生成一个完整的序列然后遍历整个完整的序列一个一个对比看看是否在nums中,如果不在返回当前数字即可,但是这种做法的时间复杂度达到了O(n^2)。

class Solution:def missingNumber(self, nums: List[int]) -> int:n=len(nums)for i in range(n+1):if i not in nums:breakreturn i

在这里插入图片描述
  最直观,最基础的优化便是进行哈希映射,使得我们每一次对比一个数字的时候最好瞬间就能定位,而python中set的机制就是先进行hash如果hash中了之后再进行对比,这样便大大缩短了运行时间,时间复杂度可降至O(n)

class Solution:def missingNumber(self, nums: List[int]) -> int:s=set(nums)for i in range(len(nums)+1):if i not in s:breakreturn i

在这里插入图片描述


http://www.ppmy.cn/news/606289.html

相关文章

图示制程技术流程

图示制程技术流程 参考链接 https://mp.weixin.qq.com/s/MbbPRzjj66HGNUW8sgIvng https://mp.weixin.qq.com/s/Qs5eUhMp0ousYSoboUP7Dw

Docker Desktop 安装使用教程

一、前言 作为开发人员&#xff0c;在日常开发中&#xff0c;我们需要在本地去启动一些服务&#xff0c;如&#xff1a;redis、MySQL等&#xff0c;就需要去下载这些在本地去启动&#xff0c;操作较为繁琐。此时&#xff0c;我们可以使用Docker Desktop&#xff0c;来搭建我们需…

LeetCode简单题之移动零

题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作&#xff0c;不能拷贝额外的数组。 尽量减少操作次数。 来源&#xff1a;力扣&am…

LeetCode80. 删除有序数组中的重复项 II

题目描述思路流程图代码题目描述 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) …

LeetCode简单题之找不同

题目 给定两个字符串 s 和 t &#xff0c;它们只包含小写字母。 字符串 t 由字符串 s 随机重排&#xff0c;然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例 1&#xff1a; 输入&#xff1a;s “abcd”, t “abcde” 输出&#xff1a;“e” 解释&#xff1a…

Intel的Barefoot与AMD的Pensando技术

Intel的Barefoot与AMD的Pensando技术 英特尔是半导体行业和计算创新领域的全球领先厂商 &#xff0c;创始于1968年。如今&#xff0c;英特尔正转型为一家以数据为中心的公司。英特尔与合作伙伴一起&#xff0c;推动人工智能、5G、智能边缘等转折性技术的创新和应用突破&#xf…

数据结构:线性表的实现

静态数组与动态数组线性表的定义List接口的定义ArrayList及其方法的实现属性构造器把数组转换为线性表的方法判断是否需要扩容和缩容问题添加元素的方法删除元素的方法修改元素的值获取元素的值获取线性表元素个数获取线性表中数组容量获取元素在线性表下标判断是否包含某个元素…

RISC-V技术与展望

RISC-V技术与展望 RISC-V&#xff08;发音为“risk-five”&#xff09;是一个基于精简指令集&#xff08;RISC&#xff09;原则的开源指令集架构&#xff08;ISA&#xff09;。 与大多数指令集相比&#xff0c;RISC-V指令集可以自由地用于任何目的&#xff0c;允许任何人设计、…