268、缺失数字-leetcode

博客围绕找出包含0到n中n个数的序列里未出现数字的问题展开。提出三种算法,一是用列表长度计算完整和再减去元素和;二是在数字有序时用完整数列和减nums中数字和;三是先排序列表再迭代查找。还给出Python3实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

  • 给定一个包含0,1,2,…,n中n个数的序列,找出0,…,n中没有出现在序列中的那个数。
  • 实例1:
输入:[3,0,1]
输出:2
  • 实例2:
输入:[9,6,4,2,3,5,7,0,1]
输出:8

说明:
你的算法应该具有线性时间复杂度。你能否仅使用额外的常数空间来实现?

  • 算法设计与分析:
  • 三种方法:
  • 1、求出一个列表的长度->mid=(长度*长度+1)//2 ->mid-列表的元素之和–>得到没有出现的值
  • 2、完整数列的和-nums中数字的和(题目给出的数字有序的条件下)
  • 3、先将传入的列表排序,然后计算列表的长度,使用for的方式进行迭代。一个个比较没返回不存在的数字即可。注意python 的迭代方式最后是迭代完成所有的元素之后就完事了,但是这样并不能查找到后面的元素,所以,需要在后面加上j += 1,来控制数值往后读取下一个
  • 使用Python3的三种方法实现:
class Solution:
    def missingNumber(self, nums: List[int]) -> int:
        # 利害:总结出一个规律:
        # 方法一:求出一个列表的长度->mid=(长度*(长度+1))//2 ->mid-列表的元素之和-->得到没有出现的值
        # return 0 if nums ==[] else ((len(nums) * (len(nums) + 1))//2) - sum(nums)
    
        # # 方法二:完整数列的和-nums中数字的和(题目给出的数字有序的条件下)
        # sum_all = 0
        # for i in range(len(nums)+1):
        #     sum_all += i
        # # 使用内置的函数sum()
        # sum_num = sum(nums)
        # return sum_all - sum_num
        
        # 方法三:将列表的值拍完序之后,逐个对比:注意python里面的sorted()方法是需要加ed的不同于c++的sort()
        nums = sorted(nums)
        nums_len = len(nums)
        # j是在完整的列表里面的,最后返回j=0的情况就是nums=[],空值就是返回0,range(0,2)=[0,1]
        j = 0
        for j in range(0, nums_len):
            if nums[j] != j:
                return j
            j = j+1   # 模拟C++中的for循环的最后的j++,否则的换python的for是不会尝试往后找的,它负责迭代完成就完事
        return j         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值