Leetcode 268 - Missing Number(等差数列 or 位运算)
来源:互联网 发布:c语言中assert 编辑:程序博客网 时间:2024/04/30 01:27
题意
给一个大小为n的数组,里面的元素为[0, n]中缺了一个数字,求缺的那个数字。
要求:
O(n) 时间。O(1) 空间。
思路
算法1
如果数组包含[1, n]那么它的和为
算法2
利用异或。
我们知道^
为:1 ^ 1 = 0
, 0 ^ 1 = 1
。
那么,就可以得到这样两个结论:
x ^ x = 0
0 ^ x = x
然后,对于这道题,我们可以另x1 = 0 ^ 1 ^ 2 ^ ....^ n
,x2 = a[0] ^ a[0] ^...a[n - 1]
最后,我们用x1 ^ x2
,可以知道:如果一个数y在a[]中出现过,假设为y ^ a[k] = 0
。
基于这个思想,假设我们没有出现的数是z,那么我们最后x1 ^ x2
的结果即为:0 ^ z = z
。
代码
//algorithm1class Solution {public: int missingNumber(vector<int>& nums) { int n = nums.size(); long long sum = 0; long long y = (long long)((n + 1) * n / 2); for (auto x : nums) sum += x; return y - sum; }};//algorithm 2class Solution {public: int missingNumber(vector<int>& nums) { int x1 = 0, x2 = 0, n = nums.size(); for (int i = 0; i < n; i++) { x1 ^= (i + 1); x2 ^= nums[i]; } return x1 ^ x2; }};
0 0
- Leetcode 268 - Missing Number(等差数列 or 位运算)
- LeetCode 268 Missing Number (位运算)
- leetcode 268. Missing Number 等差数列求和 + 位操作
- leetcode -- Missing Number -- 位运算重点
- Missing Number--^异或位运算--leetcode
- leetcode---Missing Number---位
- leetcode 268. Missing Number-寻找丢失的数|位运算
- 位操作-leetcode 268 Missing Number
- LeetCode(268) Missing Number
- LeetCode 476 Number Complement(位运算)
- 【LeetCode】268 Missing Number
- LeetCode(268)Missing Number
- [leetcode 268]Missing Number
- leetcode 268: Missing Number
- Leetcode #268 Missing Number
- [LeetCode 268] Missing Number
- leetcode 268 Missing Number
- [LeetCode]268 Missing Number
- HDU1045-行列联通快最大匹配
- 58到家数据库30条军规解读(58沈剑)
- Maven设置setting.xml文件学习
- Layout-activity_main(主页面布局)
- OpenStack的产品化历程
- Leetcode 268 - Missing Number(等差数列 or 位运算)
- Java开发者常犯的10个错误
- Struts2接受请求参数2(集合类数据)
- TypeScript笔记 5--变量声明(解构和展开)
- 【iOS界面开发】iOS UIControl事件说明
- Layout-activity_radiogroup.xml控件
- Jasper+ireport动态报表学习(三)javabean作为数据源
- lintcode-入门-斐波纳契数列
- shiro的使用1 简单的认证