zoukankan      html  css  js  c++  java
  • [leetcode]First Missing Positive

    此题思路不易想到。

    首先思路参照网上,因为是O(n),很自然想到用hash或bitmap,但不能用更多的存储,就用该数组本身吧。用正负来表示是否存在,所以第一遍的时候把负数变成不可能的正数,此处设为Integer.MAX_VALUE。

    编写中错误几次,1.是length为0;2.同一个数出现两遍,那么本来负过一次可能会错误的又负负得正,所以要判断;3.要用index0表示1,这样才表示的全。

    public class Solution {
        public int firstMissingPositive(int[] A) {
            // Start typing your Java solution below
            // DO NOT write main() function
            if (A.length == 0) return 1;
            
            for (int i = 0; i < A.length; i++) {
                if (A[i] <= 0) { A[i] = Integer.MAX_VALUE; }
            }
            
            for (int i = 0; i < A.length; i++) {
                int idx = A[i] > 0 ? A[i] : -A[i];
                if (idx <= A.length && A[idx-1] > 0) {
                    A[idx - 1] = -A[idx - 1];
                }
            }
            
            for (int i = 0; i < A.length; i++) {
                if (A[i] > 0) {
                    return i+1;
                }
            }
            
            return A.length+1;
        }
    }
    

    python3,此处用了len(nums) + 1表示不可能的数

    class Solution:
        def firstMissingPositive(self, nums: List[int]) -> int:
            # remove negative ones and ones outside length
            for i in range(len(nums)):
                if nums[i] <= 0:
                    nums[i] = len(nums) + 1
            for i in range(len(nums)):
                num = abs(nums[i])
                if num > 0 and num <= len(nums):
                    # flip nums[num - 1]
                    nums[num - 1] = -abs(nums[num - 1])
            for i in range(len(nums)):
                if nums[i] > 0:
                    return i + 1
            return len(nums) + 1
    

      

  • 相关阅读:
    setjmp和longjmp函数使用详解
    一文搞懂HMM(隐马尔可夫模型)
    Qt多工程多目录的编译案例
    HTML中Id和Name的区别
    字符识别中的图像归一化算法
    QT工程pro设置实践(with QtCreator)----非弄的像VS一样才顺手?
    暗通道优先的图像去雾算法
    callback用法简介
    ansible 批量部署准备工作
    MySQL高级管理
  • 原文地址:https://www.cnblogs.com/lautsie/p/3244495.html
Copyright © 2011-2022 走看看