版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bqw18744018044/article/details/89063323
-
题目描述
给定一个未排序的整数数组,找出其中没有出现的最小正整数。
-
思路
假设数组nums大小为n,并假设数组中的数为{1,2,…,n},那么没有出现的最小正整数为n+1;不失一般性的,假设{1,2,…,n}的任意一个数换成负数、0或者大于n的数,那么没有出现的最小正整数就是被换掉的数。
所以,对应大小为n的数组,我们将介于[1,n]的数放在其对应的位置上(例如1放到nums[0],2放到nums[1]),对于负数、0或者大于n的数则不处理。然后重新遍历数组,第一个遇到的下标与数不对应的位置,其就是我们要找的数。
-
C++实现
class Solution { public: int firstMissingPositive(vector<int>& nums) { int size = nums.size(); if(size==0)return 1; for(int i=0;i<size;i++){ //不停的将符合要求的nums[i]放到对应的地方,直至遇到不符合要求的数 while(nums[i]>0&&nums[i]<=size&&nums[i]!=nums[nums[i]-1]) swap(nums[i],nums[nums[i]-1]); } for(int i=0;i<size;i++){ if(nums[i]!=i+1)return i+1; } return size+1;//如果遍历完整个数组不存在这样的数,那么这个数就是size+1 } };