每日一题之缺失数字
缺失数字
给定一个包含 0, 1, 2, ..., n
中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
示例 1:
1 | 输入: [3,0,1] |
示例 2:
1 | 输入: [9,6,4,2,3,5,7,0,1] |
说明:
你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?
代码
首先想到高斯算法,但是有溢出的可能性
1 | public int missingNumber(int[] nums) { |
进阶
似乎忘记了以前的异或^
运算符了,这种方法更为安全和快速,举个例子:
- 0 ^ 4 = 4
- 4 ^ 4 = 0
那么,就可以不用求和,直接使用异或运算^
进行 抵消,剩下的数字就是缺失的了。
再举个例子:
- 1^1^2^2^3 = 3
1 | public int missingNumber(int[] nums) { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 YD Blog!