给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [3,4,-1,1]
输出: 2
示例 3:
输入: [7,8,9,11,12]
输出: 1
tips : 将大小在1~n之间的元素a,放置到nums[a]处。
再从头开始一次遍历,找出第一个nums[i]!=i+1的情况,返回i+1。
时间复杂度O(n), 空间复杂度O(1)
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int temp;
if(nums.size()==0) {
return 1;
}
for (int i = 0; i < nums.size();)
{
if(nums[i]>0&&nums[i]<=nums.size()&&nums[i]!=i+1&&nums[nums[i]-1]!=nums[i]) {
temp = nums[i];
nums[i]=nums[temp-1];
nums[temp-1]=temp;
} else {
i++;
}
}
for (int i = 0; i < nums.size(); i++)
{
if(nums[i]!=i+1) {
return i+1;
}
}
return nums.size()+1;
}
};
本文介绍了一种高效算法,用于找出未排序整数数组中缺失的最小正整数。通过一次遍历将合适范围内的元素放置于其正确位置,再次遍历即可找到首个不符合预期的索引,即为所求。此算法时间复杂度为O(n),空间复杂度为O(1)。
447

被折叠的 条评论
为什么被折叠?



