题目地址
解题思路
有三种思路:
1.直接暴力遍历数组,发现和下标对不上的数字记录下来并返回。
2.利用二分法进行巧妙求解。
3.利用数学方法求和公式进行计算。
代码实现(C++)
解法一:
class Solution {
public:
int missingNumber(vector<int>& nums)
{
int i=0;
for(;i<nums.size();i++)
{
if(nums[i]!=i)
{
break;
}
}
return i;
}
};
解法二:
class Solution {
public:
int missingNumber(vector<int>& nums)
{
int left=0,right=nums.size();
while(left<right)
{
int mid=(left+right)/2;
if(nums[mid]==mid)
{
left=mid+1;
}
else
{
right=mid;
}
}
return right;
}
};
解法三:
class Solution {
public:
int missingNumber(vector<int>& nums)
{
int sum=((0+nums.size())*(nums.size()+1))/2;
for(auto num : nums)
{
sum-=num;
}
return sum;
}
};