zoukankan      html  css  js  c++  java
  • [LeetCode] 41. First Missing Positive 首个缺失的正数

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

    Example 1:

    Input: [1,2,0]
    Output: 3
    

    Example 2:

    Input: [3,4,-1,1]
    Output: 2
    

    Example 3:

    Input: [7,8,9,11,12]
    Output: 1
    

    Note:

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

    给一个没排序的整数数组,找出缺失的最小的正整数。

    解法:

    Java:

    public class Solution {
        public int firstMissingPositive(int[] A) {
            int i = 0;
            while(i < A.length){
                if(A[i] == i+1 || A[i] <= 0 || A[i] > A.length) i++;
                else if(A[A[i]-1] != A[i]) swap(A, i, A[i]-1);
                else i++;
            }
            i = 0;
            while(i < A.length && A[i] == i+1) i++;
            return i+1;
        }
        
        private void swap(int[] A, int i, int j){
            int temp = A[i];
            A[i] = A[j];
            A[j] = temp;
        }
    }
    

      

    Python: wo

    class Solution(object):
        def firstMissingPositive(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            mx = 0
            flag = set()
            for n in nums:
                if n > mx:
                    mx = n
                flag.add(n) 
            i = 1
            while i < mx:
                if i not in flag:
                    return i
                i += 1
            return mx + 1  
    

    Python:

    class Solution:
        # @param A, a list of integers
        # @return an integer
        def firstMissingPositive(self, A):
            i = 0
            while i < len(A):
                if A[i] > 0 and A[i] - 1 < len(A) and A[i] != A[A[i]-1]:
                    A[A[i]-1], A[i] = A[i], A[A[i]-1]
                else:
                    i += 1
    
            for i, integer in enumerate(A):
                if integer != i + 1:
                    return i + 1
            return len(A) + 1
    

    C++:

    // NOT constant space
    class Solution {
    public:
        int firstMissingPositive(vector<int>& nums) {
            int mx = 0;
            unordered_set<int> s;
            for (int num : nums) {
                if (num <= 0) continue;
                s.insert(num);
                mx = max(mx, num);
            }
            for (int i = 1; i <= mx; ++i) {
                if (!s.count(i)) return i;
            }
            return mx + 1;
        }
    };
    

    C++:

    class Solution {
    public:
        int firstMissingPositive(vector<int>& nums) {
            int n = nums.size();
            for (int i = 0; i < n; ++i) {
                while (nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]) {
                    swap(nums[i], nums[nums[i] - 1]);
                }
            }
            for (int i = 0; i < n; ++i) {
                if (nums[i] != i + 1) return i + 1;
            }
            return n + 1;
        }
    };

    类似题目:

    Missing Number

    Find the Duplicate Number

    Find All Numbers Disappeared in an Array

    Couples Holding Hands

    All LeetCode Questions List 题目汇总

  • 相关阅读:
    【转】Celery 使用入门
    OS + Ubuntu 11.6.04 qbittorrent web ui /
    java android helloworld
    web sec / linux security script / linux anquan jiagu
    java ee / java diagnosis tools cubic 1.4.1 / jvm tools cubic
    db postgres citus 10
    PapaMelon #5 设计单向链表
    First-ever Corundum Developer Meeting: the Future of Corundum
    Re: [corundum-nic] RDMA support
    赛灵思发布SN1000网络加速卡,集成NXP LX2162A
  • 原文地址:https://www.cnblogs.com/lightwindy/p/9582309.html
Copyright © 2011-2022 走看看