leetcode268:Missing Number
2017-08-02 09:14
405 查看
描写叙述
Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.For example,
Given nums = [0, 1, 3] return 2.
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
解法
方法一:时间复杂度O(n),空间复杂度O(n/32)传统方法, 同一时候使用位运算压缩空间(int型32位标记32个数字)
//36ms class Solution { public: int missingNumber(vector<int>& nums) { int n = nums.size() + 1; int c = (n >> 5) + 1; int *p = new int[c]; memset(p, 0, c*sizeof(int)); for (int x : nums) p[x >> 5] |= (1 << x % 32); for (int i = 0; i<n; i++) if(((p[i >> 5] >> (i % 32)) & 1) == 0) return i; } };
方法二:
位运算,将n+1个数字拓展到2^(lg(n)+1)个数。所有异或就可以得到缺失的数字。
时间复杂度O(2^(lg(n)+1)),空间复杂度O(1)
//36ms class Solution { public: int missingNumber(vector<int>& nums) { int n = nums.size() + 1; int ans = 0; int _pow = (int)pow(2, 1 + (int)(log(n) / log(2))); for (int x : nums) ans ^= x; for (int i = n; i < _pow; i++) ans ^= i; return ans; } };
相关文章推荐
- [LeetCode]268 Missing Number
- leetcode 268 Missing Number(异或运算的应用)
- [leetcode-268]Missing Number(c)
- LeetCode[268] Missing Number
- leetcode268~Missing Number
- Leetcode 268 Missing Number
- LeetCode(268) Missing Number
- LeetCode172 Factorial Trailing Zeroes. LeetCode258 Add Digits. LeetCode268 Missing Number
- leetcode【268 Missing Number】【Python】
- Leetcode 268 Missing Number
- LeetCode 268 Missing Number (位运算)
- leetcode-268-Missing Number
- 位操作-leetcode 268 Missing Number
- LeetCode 268: Missing Number
- 【LeetCode】268 Missing Number (java实现)
- Leetcode 268 Missing Number
- LeetCode 268 -Missing Number ( JAVA )
- leetcode 268: Missing Number
- LeetCode 268---Missing Number
- LeetCode(268) Missing Number