题解 | #数组中未出现的最小正整数#(原地哈希空间O(1))

数组中未出现的最小正整数

http://www.nowcoder.com/practice/8cc4f31432724b1f88201f7b721aa391

最小整数

  1. 设数组长度为n,当缺失的最小整数最大的情况下,一定是n+1,数组0-n数组随机排列。
  2. 当有不在1-n之间的数字时,不考虑这些超出范围的数字,它们哈希与否都不影响得到缺失的最小整数。缺失的整数范围是1-n+1。同时,防止数组哈希时候越界。
class Solution {
public:
    int minNumberdisappered(vector<int>& arr) {
        int n = arr.size();
        for(int i = 0; i < n; i++) {
            while(arr[i] > 0 && arr[i] <= n && i + 1 != arr[i]) {
                swap(arr[arr[i]-1], arr[i]);
            }
        }
        for(int i = 0; i < n; i++) {
            if(arr[i] != i+1) return i+1;
        }
        return n+1;
    }
};
全部评论

相关推荐

06-02 15:53
阳光学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务