美文网首页
41. 缺失的第一个正数

41. 缺失的第一个正数

作者: calm_peng | 来源:发表于2018-12-25 22:22 被阅读0次
    给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
    
    示例 1:
    
    输入: [1,2,0]
    输出: 3
    示例 2:
    
    输入: [3,4,-1,1]
    输出: 2
    示例 3:
    
    输入: [7,8,9,11,12]
    输出: 1
    说明:
    
    你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。
    
    
    /*
    思路:给定的数组nums不管里面的值是什么 结果的答案 肯定是在 1--nums.length+1中 可以看哪些有 有的话 就可以记录 最后 遍历 发现最小的没有的 
    空间复杂度:O(n)
    */
    class Solution {
        public int firstMissingPositive(int[] nums) {
            if(nums.length<=0)
                return 1;
            
            
            boolean[] temp = new boolean[nums.length+1];
            for(int i = 0;i<nums.length;i++){
                if(nums[i]>nums.length || nums[i]<=0)
                    continue;
                else
                    temp[nums[i]-1] = true;
            }
            for(int i = 0;i<=nums.length;i++){
                if(temp[i] == false)
                    return i+1;
            }
                
            return nums.length;
            
        }
    }
    
    空间复杂度:O(1)
    class Solution {
        public int firstMissingPositive(int[] nums) {
            if (nums == null || nums.length == 0) {
                return 1;
            }
            for (int i = 0; i < nums.length; i++) {
                while (0 < nums[i] && nums[i] <= nums.length && nums[i] != nums[nums[i]-1]) {
                    int temp = nums[nums[i] - 1];
                    nums[nums[i] - 1] = nums[i];
                    nums[i] = temp;
                }
            }
            for (int i = 0; i < nums.length; i++) {
                if (nums[i] != i + 1) {
                    return i + 1;
                }
            }
            return nums.length + 1;
        }
    }
    

    leetcode

    相关文章

      网友评论

          本文标题:41. 缺失的第一个正数

          本文链接:https://www.haomeiwen.com/subject/ytnqlqtx.html