/*为了获得线性时间的解法,直观的想法是Hash Table,然而Hash Table
会引入O(n)的空间复杂度。因此可以试着用输入的数组直接作为Hash Table,
用nums[i]存储大小为i的数,第一个nums[i] != i时,找到答案为i。
*/
class Solution {
public:
int missingNumber(vector<int>& nums) {
for(int i = 0; i < nums.size(); ){
if(nums[i] == i) ++i;
else{
if(nums[i] < nums.size()) swap(nums[i], nums[nums[i]]);
else ++i;
}
}
for(int i = 0; i < nums.size(); ++i){
if(nums[i] != i) return i;
}
return nums.size();
}
};