[leetcode] First Missing Positive
2014-05-08 15:35
411 查看
First Missing Positive
使用原数组下标和数组元素进行映射的方法,找到第一个不对应的元素,返回其下标+1即可。#include "iostream" using namespace std; class Solution { public: int firstMissingPositive(int A[], int n) { if (A==NULL||n<1) {//数组为空 return 1; } int cur=0; while (cur<n) { int temp=A[cur]; if (temp>0&&temp<=n&&A[temp-1]!=temp) {//注意交换条件 //条件1:0<temp<=n //条件2:temp!=cur+1,条件3已经包含了这种情况temp=A[cur+1],故可以省去。 //条件3:A[temp-1]!=temp,防止死循环 //交换 A[cur]=A[temp-1]; A[temp-1]=temp; continue; //继续while循环 } ++cur; } //遍历数组找到第一个映射不一致的位置 cur=0; while (cur<n&&A[cur]==cur+1) { ++cur;//相对于cur++,推荐使用++cur } return cur+1; } }; int main(){ int A[]={3,4,-1,1}; Solution so; cout<<so.firstMissingPositive(A, 4)<<endl; return 0; }
精简代码版:
class Solution { public: int firstMissingPositive(int A[], int n) { //[0..i) is 1..i for (int i=0; i<n; ) { if (A[i]==i+1) { ++i; }else if ((A[i]<=i)||(A[i]>n)||(A[A[i]-1]==A[i])){ A[i]=A[--n]; }else{ swap(A[i], A[A[i]-1]); } } return n+1; } };
相关文章推荐
- (LeetCode 41)First Missing Positive
- LeetCode First Missing Positive
- Leetcode:First Missing Positive
- LeetCode--First Missing Positive (第一个丢失的正整数)Python
- Leetcode First Missing Positive
- First Missing Positive leetcode
- [leetcode]First Missing Positive
- LeetCode First Missing Positive
- [LeetCode] First Missing Positive 解题报告
- [Leetcode] First Missing Positive
- First Missing Positive -- LeetCode
- LeetCode | First Missing Positive
- leetcode 41:First Missing Positive
- leetcode-First Missing Positive
- leetcode First Missing Positive
- leetcode: First Missing Positive
- 【leetcode】 First Missing Positive
- leetcode:First Missing Positive 【Java】
- 【LeetCode】First Missing Positive
- [Leetcode 41] First Missing Positive