思路,进行位置互换
下标为i的 对应的数应该是i+1
比如:
3 4 -1 1
最后的位置结果为 1 -1 3 4
输出第一个位置上的数不是i+1的对应的本该的数i+1
代码如下:
class Solution {
public:
int firstMissingPositive(vector<int>& a) {
int i = 0, n = a.size();
//0的位置是1,依次类推
while(i < n)
{
//如果当前是正整数且不在对应的位置上则进行调换
if(a[i] > 0 && a[i] <= n && a[a[i]-1] != a[i]) swap(a[a[i]-1],a[i]); //在则向下走
else i++;
}
for(i = 0; i < n; ++i)
//如果当前位置的数不是i+1,则证明缺少i+1,输出即可
if(a[i] != i+1) return i+1;
//如果是1-n的数都有,则输入n+1
return n+1;
}
};