题目
https://leetcode.com/problems/missing-number/
思路
这道题真的非常简单,我想的方法是直接创建一个长度为sum+1的有序数组和它做差集,输出结果。
1 | class Solution(object): |
有点丑陋,但是能跑。
然后我看到一个比较巧妙的单行代码:
1 | class Solution: |
原理是求和做差,很简单的道理。n*(n+1)/2是0到n的和,减去数组里的所有数的和就能找到那个少掉的数。
还有个异或的算法,原理是a^b^b=a,相同的数字异或会消除自身,而且异或满足交换律结合律,所以最后就会变成:
1 | a ^ b ^ a ^ b ^ c ^ c ^ d |
代码如下:
1 | public int missingNumber(int[] nums) { |