leetcode day13 Missing Number

题目描述
给定一个数组,里面是0-n的数字,找出缺了的一项,例如:
在这里插入图片描述

思路

1、利用哈希表,但是是只有key的哈希表,在python中表现的数据结构是set(集合)。set跟dict差不多,但是set只有key,没有value:
set的使用方法
set的性质:确定性,互异性,无序性
set的使用方法:
a = set() ——创建
a.add()——添加
a.remove()——删除
a.clear()——清空
a.pop()——取出值(随机)

实现这个算法的代码是:

class Solution(object):
    def missingNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        num_set = set(nums)
        n = len(nums) + 1
        for number in range(n):
            if number not in num_set:
                return number

2、sorting的方法,就是先排序,然后遍历看看缺了哪个,这个方法有点弱智我们就不写了。
3、利用XOR的方法进行计算:

在这里插入图片描述

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

4、一个很神奇的方法:
因为知道是多少个数,缺了一个,所以把总数算出来,减去原本的总数sum即得到缺了的那个数。

class Solution:
    def missingNumber(self, nums):
        expected_sum = len(nums)*(len(nums)+1)//2
        actual_sum = sum(nums)
        return expected_sum - actual_sum
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值