• First Missing Positive


    Given an unsorted integer array, find the first missing positive integer.

    For example,
    Given [1,2,0] return 3,
    and [3,4,-1,1] return 2.

    Your algorithm should run in O(n) time and uses constant space.

    Subscribe to see which companies asked this question

    Show Tags
    Show Similar Problems
     
    class Bitmap {
    public:
        Bitmap() {
            int i = 0;
            while (i < size) {
                bitmap[i] = 0;
                i++;
            }
        }
    
    /*
    
    * 设置第i位
    
    * i >> SHIFT 相当于 i / (2 ^ SHIFT),
    
    * i&MASK相当于mod操作 m mod n 运算
    
    */
    
        void bitset(int i) {
    
            bitmap[i >> SHIFT] |= 1 << (i & MASK);
    
        }
    
    //获取第i位
    
        int bittest(int i) {
    
            return bitmap[i >> SHIFT] & (1 << (i & MASK));
    
    
        }
    
    //清除第i位
    
        int bitclear(int i) {
    
            return bitmap[i >> SHIFT] & ~(1 << (i & MASK));
    
        }
    private:
    
        const static int INT_BITS  = sizeof(int);
    
        const static int SHIFT =  5; // 2^5=32
    
        const static int  MASK = 0x1f; // 2^5=32
    
        const static int  _MAX  = 1024;//max number
        const static int size = _MAX / INT_BITS;
        int bitmap[size];
    };
    
    class Solution {
    public:
        int firstMissingPositive(vector<int>& nums) {
            int size_num = nums.size();
            int i;
            int positive_num = 0;
            Bitmap bitmap;
            
            for (i=0; i<size_num; i++) {
                if (nums[i] > 0 && bitmap.bittest(nums[i]) == 0) {
                    positive_num++;
                    bitmap.bitset(nums[i]);
                }
            }
            
            for (i=1; i<=positive_num; i++) {
                if (bitmap.bittest(i) == 0) {
                    return i;
                }
            }
            return i;
        }
    };
  • 相关阅读:
    uniapp 小程序 获取位置信息
    笔记本使用命令创建wifi
    vue 解决跨域问题
    uniapp 条件编译
    谷歌浏览器解决跨域
    MindManager离线安装包官网下载
    Golang Gitee Webhook 签名验证
    Debian11 Gnome 安装搜狗输入法
    ElasticSearch Java 客户端请求超时
    动态sql,动态实体
  • 原文地址:https://www.cnblogs.com/SpeakSoftlyLove/p/5184716.html
Copyright © 2020-2023  润新知