78 - 缺失数字
题目
给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
示例 1:
输入: [3,0,1] 输出: 2
示例 2:
输入: [9,6,4,2,3,5,7,0,1] 输出: 8
说明: 你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?
解答
这题目问题很大。。不过leetcode题目一向如此。。
给一个数组,长度是n,其元素内容是打乱的从0到n,但里面缺了一个数,求那个数。
第一反应就是要排序咯
排序
js的这个nums.sort()
,问题很大。。
输入:
[45, 35, 38, 13, 12, 23, 48, 15, 44, 21, 43, 26, 6, 37, 1, 19, 22, 3, 11, 32, 4, 16, 28, 49, 29, 36, 33, 8, 9, 39, 46, 17, 41, 7, 2, 5, 27, 20, 40, 34, 30, 25, 47, 0, 31, 42, 24, 10, 14]
输出:
nums [
0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 19,
2, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
3, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
4, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
5, 6, 7, 8, 9
]
???说好的排序呢?
Runtime: 92 ms, faster than 23.00% of JavaScript online submissions for Missing Number.
Memory Usage: 37.7 MB, less than 17.14% of JavaScript online submissions for Missing Number.
go的sort包就好多了😂,起码不会搞这种幺蛾子
Runtime: 32 ms, faster than 9.59% of Go online submissions for Missing Number.
Memory Usage: 5.9 MB, less than 100.00% of Go online submissions for Missing Number.
换一种排序方法会不会快一些呢?
Runtime: 24 ms, faster than 28.22% of Go online submissions for Missing Number.
Memory Usage: 5.9 MB, less than 100.00% of Go online submissions for Missing Number.
快了一点点😂
哈希表
Runtime: 84 ms, faster than 27.72% of JavaScript online submissions for Missing Number.
Memory Usage: 39.9 MB, less than 5.72% of JavaScript online submissions for Missing Number.
比排序稍微快一点点。
Runtime: 28 ms, faster than 18.08% of Go online submissions for Missing Number.
Memory Usage: 6.7 MB, less than 100.00% of Go online submissions for Missing Number.
骚操作之异或
0^0=0 0^1=1 1^0=1 1^1=0
简言之,相同的两个数,异或是0;不同是1
而且a⊕b⊕a=b
因此让下标和数组元素异或,再把结果异或进总长度。除了目标外都会变成0了
总之可以做到,且速度贼快
Runtime: 16 ms, faster than 91.23% of Go online submissions for Missing Number.
Memory Usage: 5.9 MB, less than 100.00% of Go online submissions for Missing Number.
Runtime: 16 ms, faster than 91.23% of Go online submissions for Missing Number.
Memory Usage: 5.9 MB, less than 100.00% of Go online submissions for Missing Number.
更骚的是用数学
简言之,0到n全加起来,然后和数组全加起来做个减法,留下的就是缺失的
Runtime: 56 ms, faster than 89.96% of JavaScript online submissions for Missing Number.
Memory Usage: 37.3 MB, less than 25.72% of JavaScript online submissions for Missing Number.
Runtime: 16 ms, faster than 91.23% of Go online submissions for Missing Number.
Memory Usage: 5.9 MB, less than 100.00% of Go online submissions for Missing Number.
Last updated
Was this helpful?