Problem: 面试题 17.04. 消失的数字
文章目录
- 题目描述
- 思路
- 复杂度
- Code
题目描述
思路
思路1:求和
先求取1-n的数字和,再减去数组中所有元素的和即为缺失数
思路2:位运算
我们利用异或运算的特性:相同位为0,不同位为1;0与仍何数异或后得到仍何数,即我们先另一个变量(初始为0)与数字1-n异或,再次与数组中的所有元素异或,最后得到的值则为所缺失的元素;
复杂度
思路1与思路2的时间何空间复杂度均如下
时间复杂度:
O ( n ) O(n) O(n)
空间复杂度:
O ( 1 ) O(1) O(1)
Code
思路1:
class Solution {
public:/*** Bit operation* @param nums Given array* @return int*/int missingNumber(vector<int> &nums) {int n = nums.size();int res = 0;for (int i = 0; i <= n; ++i) {res ^= i;}for (int i = 0; i < n; ++i) {res ^= nums[i];}return res;}
};
思路2:
class Solution {
public:/*** Maths* @param nums Given array* @return int*/int missingNumber(vector<int> &nums) {int n = nums.size();int res = 0;for (int i = 0; i <= n; ++i) {res += i;}for (int i = 0; i < n; ++i) {res -= nums[i];}return res;}
};