Find Missing Number
这题算法不好归为那类,大概是交换类算法吧
class Solution {
public:
int firstMissingPositive(int A[], int n) {
for(int i=0;i<n;)
{
int cur=A[i]-1;
if(cur<0 || cur>=n || A[cur]==A[i])//这里几次都犯了错误,写成cur==i, cur==i蕴含了A[cur]==A[i],这里应该
即使是遇到和要交换的数相同,也不能交换,例如1 1这种会死循环,所以写A[cur]==A[i]
{
i++;
continue;
}
swap(A[i],A[cur]);
}
for(int i=0;i<n;i++)
{
if(A[i]!=i+1)
return i+1;
}
return n+1;//这里第一次写的时候,还漏掉了,因为可能真个数组都是1..n 那么n+1 就是返回值了
}
};