我的解法:
class Solution {
public:
int missingNumber(vector<int>& nums) {
int n=nums.size();
nums.push_back(n+1);
int flag=0;
for(int i=0;i<n;i++){
int t=abs(nums[i]);
if(t==0) flag=i;
nums[t] = nums[t] > 0 ? -nums[t] : nums[t];
}
for(int i=0;i<n+1;i++){
if(nums[i] > 0){ //此处可以解决[1, 0]; 但是判断的是nums[i]>0,那么也有可能为0,并且这个0没有被置为负0,如[2,0] ;
return i;
}
}
return flag; //比如:[2, 0],
}
};
答案提供给了多种优化方法:
最简单的是高斯公式:(思维定式限制了我的想象力orz)
class Solution {
public:
int missingNumber(vector<int>& nums) {
int n=nums.size();
int sum=0;
for(int i=0;i<n;i++){
sum+=nums[i];
}
int cnt=n*(n+1)/2;
return cnt-sum;
}
};
网友评论