41. First Missing Positive
Given an unsorted integer array, find the first missing positive integer.
For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.
Your algorithm should run in O(n) time and uses constant space.
按照nums[i]的值将它移动到该去的位置那就是nums[nums[i]-1],比如说nums[i]=5,那么应该在下标为4的位置
class Solution {
public:
int firstMissingPositive(vector<int>& nums)
{
int i = 0;
while (i < nums.size())
{
if (nums[i] > 0 && nums[i] <= nums.size() && nums[i] != i + 1 && nums[i] != nums[nums[i]-1])
swap(nums[i], nums[nums[i]-1]);
else
i++;
}
for (int k = 0; k < nums.size(); k++)
{
if (nums[k] != k + 1)
return k + 1;
}
return nums.size() + 1;
}
};
268. Missing Number
和上面那个题神似!!
Given an array containing n distinct
numbers taken from 0, 1, 2, ..., n
,
find the one that is missing from the array.
For example,
Given nums = [0, 1, 3]
return 2
.
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
class Solution {
public:
int missingNumber(vector<int>& nums)
{
for (int i = 0; i < nums.size(); i++)
{
if (nums[i] >= nums.size() || nums[i] < 0 || nums[i] == nums[nums[i]])
continue;
swap(nums[i], nums[nums[i]]);
i--;
}
int k;
for (k = 0; k < nums.size(); k++)
{
if (nums[k] != k)
break;
}
return k;
}
};