算法:缺失数字
给定一个包含0 1 2 3 .... n
的未排序数列,找出0~n
中没有出现在里面的那个数。
示例 1:
输入: [3,0,1]
输出: 2
示例 2:
输入: [9,6,4,2,3,5,7,0,1]
输出: 8
说明:你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?
代码如下:
class Solution {
public:
int missingNumber(vector<int>& nums) {
if(nums.size()<=0)return 0;
/*将所有的数字交换到对应下标,遇到相等或者已经对应的情况不做处理*/
for(int i=0;i<nums.size();i++){
while(i!=nums[i]&&nums[i]<nums.size()){
int tmp = nums[i];
if(nums[tmp]==nums[i]) break;
nums[i] = nums[tmp];
nums[tmp] = tmp;
}
}
for(int i=0;i<nums.size();i++){
if(i!=nums[i])return i;
}
return nums.size();
}
};