数组Mex

Posted on 2016-04-04 20:21  徐岩  阅读(373)  评论(0)    收藏  举报

题目描述

请设计一个高效算法,查找数组中未出现的最小正整数。

给定一个整数数组A和数组的大小n,请返回数组中未出现的最小正整数。保证数组大小小于等于500。

测试样例:
[-1,2,3,4],4
返回:1

Solution 1:
class ArrayMex {
public:
    int findArrayMex(vector<int> A, int n) {
        // write code here
        //  n <= 500
        map<int, int> myMap;
        for(int i = 0; i < n; ++i) {
            myMap[A[i]] = 1;
        }
        
        for(int i = 1; i <= n; ++i) {
            if(myMap.count(i) != 1) {
                return i; 
            }
        } 
        return 0;
    }
};
Solution 2:
class ArrayMex {
public:
    int findArrayMex(vector<int> A, int n) {
        // write code here
        //  n <= 500
        for(int i = 1; i <= n; ++i) {
            if(find(A.begin(), A.end(), i) == A.end()) {
                return i;
            }
        }
        return 0;
    }
};