LeetCode题解|面试题17.04.消失的数字——异或等4种方法

题目描述及链接

消失的数字
LeetCode题解|面试题17.04.消失的数字——异或等4种方法_第1张图片

参数解释

参数
nums是传入的数组(大小为numsSize),numsSize是传入数组元素的个数(同时也是完整数组最大的数)。
由于完整数组是从0到numsSize,所以完整数组的大小是numsSize+1。
理清这一点对于思路2思路3很重要。

解题思路

思路1

先排序,遍历数组,当遍历过程中当前数字不等于前一个数字+1时,这个数字-1就是缺失的数字。
但是排序的时间复杂度超过O(n),在这题不合适。

思路2

把数字从0到numsSize累加到变量sum中,再减去传入数组数字的和,就得到缺失的数字。

完整代码

LeetCode题解|面试题17.04.消失的数字——异或等4种方法_第2张图片

思路3

创建一个有numsSize+1个元素的数组tmp(元素全部初始化为0),将他的nums[i]下标的元素赋值为1,则会有一个元素未被赋值为1,这个元素的下标就是缺失的数字。

完整代码

LeetCode题解|面试题17.04.消失的数字——异或等4种方法_第3张图片

思路4

利用

  • 任何数字和0异或还是它本身
  • 两个相同数字异或结果为0

这时异或找出缺失的一个数字的典型题。

完整代码

LeetCode题解|面试题17.04.消失的数字——异或等4种方法_第4张图片

总结

本题是异或找缺失数字的典型题。
由于数组数字从0到numsSize的特点,也可以用思路3的哈希表的方法。

你可能感兴趣的:(LeetCode,leetcode,算法)