Problem:
Solution:
找出给定数组中缺失的那个数,数组中的各元素不重复,范围为0到n. 首先下可能会到的是比较暴力的时间复杂度为O(n^2)的方法,即对每个0到n的整数都在给定数组中搜索看有无和它相等的元素,如果有,则它就是丢失的那个整数,如果没有,那么n+1则为丢失的元素。
class Solution {
public:
int missingNumber(vector<int>& nums) {
int len = nums.size();
int j;
for (int i = 0;i < len;i++)
{
for (j = 0; j < len; j++)
{
if (i == nums[j]) break;
}
if (j == len) return i;
}
return len;
}
};
但题目要求在线性时间内完成,且数组中的数都是连续的整数,很便欲于求和,于是我想到能否用SUM来判断。把它们的SUM与[1,n]的连续整数的和做比较,具体方法如下:
class Solution {
public:
int missingNumber(vector<int>& nums) {
int sum = 0;
int len = nums.size();
int total = len*(len+1)/2;
for (int i = 0;i < len;i++)
{
sum += nums[i];
}
if (sum == total) return 0;
else if (total == sum+len) return len;
else return total-sum;
}
};