原题连接Missing Number
给定大小为n的数组,由0, 1, 2, …, n构成,其中缺少了某个值,找到它。要求时间复杂度是O(n),空间复杂度是O(1)
虽然数组无序但是组成数组的元素整体有序而且每个元素是严格加一递增(只有一个不是,假设这个值是m),考虑下面两个和的表示形式
sum1 = 0 + 1 + 2 + ... + m-1 + m+1 + ... + n
= 1 + 2 + ... + m-1 + m+1 + ... + n
sum2 = 1 + 2 + ... + m-1 + m + m+1 + ... + n
= (n * (n + 1)) / 2
其中,sum1是数组的和(缺少了m值),sum2是1到n的和,那么sum1和sum2实际上就是差了数组缺少的元素m,也就是通过sum2 - sum1即可计算出m的值
代码实现如下
class Solution {
public:
int missingNumber(vector<int>& nums) {
return (nums.size() * (nums.size() + 1)) / 2 - accumulate(nums.begin(), nums.end(), 0);
}
};