我的解法:
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;
}
};