leetcode with python:268. Missing Number

题目:

Given an array nums containing n distinct numbers in the range [0, n], return the only number in the range that is missing from the array.

给定一个阵列,里面本来应该有0~n的数各一,找出缺少的那个数
ex:input:[3,0,1]=>output:2

这题的解法有好几种
先从直观的开始讲好了

class Solution:    def missingNumber(self, nums: List[int]) -> int:        if 0 not in nums: #先确认missing number是不是0            return 0                nums.sort()        for i in range(len(nums)-1):            if nums[i]+1 != nums[i+1]:                return nums[i]+1                    return len(nums) #都没找到不连续的点,代表missing number在尾端

先将阵列排序后再遍历
一发现不连续的点,即代表发现missing number的位置
且记得考量到missing number在头尾的可能
最后执行时间140ms(faster than 92.08%)

也有不用事先排序的解法

class Solution:    def missingNumber(self, nums: List[int]) -> int:        total=0        for i in range(1,len(nums)+1):            total=total+i        return total-sum(nums)

只要算出0~n的总和,再减去阵列数的总和
结果就是我们要的missing number
最后执行时间128ms(faster than 98.93%)

接下来这个解法是在讨论区看到的
我也没想到这题居然能用位元运算下去解

class Solution:    def missingNumber(self, nums: List[int]) -> int:        xsum = 0        for x in nums:             xsum ^= x                for i in range(len(nums)+1):            xsum ^= i                return xsum

设一数0和nums每个数做^运算,再和0~n每个数做^运算,最后的结果就是missing number
至于为什么,我们以[3,0,1]为例,操作起来如下
0^3^0^1^0^1^2^3经过交换律后变为
0^0^0^1^1^2^3^3又x^x=0
0^0^2^0=0^2=2,而2就是我们要的missing number
最后执行时间133ms(faster than 97.07%)

那我们下题见


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章