本文共 995 字,大约阅读时间需要 3 分钟。
给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0..n 中没有出现在序列中的那个数。
示例
示例 1:
输入: [3, 0, 1]
输出: 2示例 2:
输入: [9, 6, 4, 2, 3, 5, 7, 0, 1]
输出: 8一种可行的方法是对从 0 到 n 求和,然后对 nums 求和,两者之差就是缺失的数字,但是这种方式需要注意缺失的数是 0 的情况,即两者之和相等时可以认定为缺失的数是 0。
代码实现
class Solution: def missingNumber(self, nums): """nums是一个整数列表""" sum_ns = 0 for i in range(len(nums) + 1): sum_ns += i sum_nums = 0 for num in nums: sum_nums += num if sum_ns == sum_nums: return 0 else: return sum_ns - sum_nums
思路二:异或运算
异或运算的一个重要性质是,相同的数异或得 0,不同的数异或不为 0,可以推广到多个数异或的情形。本题的解法如下:
代码实现
class Solution: def missingNumber(self, nums): """nums是一个整数列表""" ret = 0 for i in range(len(nums) + 1): ret ^= i for num in nums: ret ^= num return ret
以上两个思路都能解决问题,但异或运算的方法更高效,且空间复杂度更低。
转载地址:http://vmgyk.baihongyu.com/