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?
class Solution {
public:
int missingNumber(vector<int>& nums) {
double prox;
int size=nums.size();
int sum=0;
for(int i=0;i<size;i++){
sum+=nums[i];
}
prox=-0.5+sqrt(0.25+2*sum);
if(1+ceil(prox)==size){
return prox+1;
}else{
int c=ceil(prox);
return c*(c+1)/2-sum;
}
}
};
解题思路:
等差数列求和公式:(首项+末项)*表大小/2
然后将输入的表求和。用一元二次求根公式求出最接近该和的一个数字就知道其实实际的表长了
再用求和公式对此数字求和-输入表的和就是缺的那一个数。
会做这题证明了我数学至少有初二水平(XD)
应该还有位操作的方法的,不过这个看起来也已经很快了。运气好能够打败80%的答案
嘿嘿
下次研究