一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
示例 1:
输入: [0,1,3] 输出: 2
示例 2:
输入: [0,1,2,3,4,5,6,7,9]
输出: 8限制:
1 <= 数组长度 <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
提交的代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int missingNumber(vector<int>& nums) {
vector<int> nums2;
int len = nums.size();
int n = 0;
for (int i = 0; i < len + 1; i++)
{
nums2.push_back(i);
}
nums.push_back(0);
for (int i = 0; i < len+1; i++)
{
if (nums[i] != nums2[i])
{
n = nums2[i];
break;
}
}
return n;
}
int main()
{
int num;
vector<int> nums;
while (cin >> num)
{
nums.push_back(num);
if (cin.get() == '\n')
{
break;
}
}
int c;
c = missingNumber(nums);
cout << c << endl;
return 0;
}
};
在编译器写的(思路在注释):
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int missingNumber(vector<int>& nums)
{
vector<int> nums2;
int len = nums.size();
int n = 0;
for (int i = 0; i < len + 1; i++)
{
nums2.push_back(i); //用一个新数组存0~n的按正确顺序完整的数字排列
}
nums.push_back(0); //给原来的数组补一位,让它跟正确的数组一样长,这样下面的for循环才能执行
for (int i = 0; i < len+1; i++)
{
if (nums[i] != nums2[i]) //跟正确的数组一一对比,不一样的那个就是缺了的
{
n = nums2[i];
break;
}
}
return n;
}
int main()
{
int num;
vector<int> nums;
while (cin >> num)
{
nums.push_back(num);
if (cin.get() == '\n')
{
break;
}
}
int c;
c = missingNumber(nums);
cout << c << endl;
return 0;
}