桶排序,当nums[i]!=i+1时,交换nums[i]和nums[nums[i]-1]],这一步后nums[nums[i]-1]中就是正确的值。所以若存在i+1,最终会换到nums[i]。
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int n=nums.size();
int i;
for(i=0;i<n;i++)
{
while(nums[i]!=i+1)
{
if(nums[i]<=0||nums[i]>n||nums[i]==nums[nums[i]-1])
break;
swap(nums[i],nums[nums[i]-1]);
}
}
for(i=0;i<n;i++)
{
if(nums[i]!=i+1)
return i+1;
}
return n+1;
}
};
本文介绍了一种基于桶排序原理的算法实现,通过不断交换数组中的元素来寻找缺失的第一个正整数。具体步骤包括检查每个位置的数值是否等于其索引加一,并在不等于的情况下进行交换,直至找到第一个不满足条件的位置。
3520

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



