zoukankan      html  css  js  c++  java
  • [Swift]LeetCode41. 缺失的第一个正数 | First Missing Positive

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/9901428.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    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.


     给定一个未排序的整数数组,找出其中没有出现的最小的正整数。

    示例 1:

    输入: [1,2,0]
    输出: 3
    

    示例 2:

    输入: [3,4,-1,1]
    输出: 2
    

    示例 3:

    输入: [7,8,9,11,12]
    输出: 1
    

    说明:

    你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。


    8ms

    1 class Solution {
    2     func firstMissingPositive(_ nums: [Int]) -> Int {
    3         if nums.count == 0 {return 1}
    4         var nums = nums
    5         for i in 0..<nums.count {while nums[i] >= 1 && nums[i] <= nums.count && nums[nums[i] - 1] != nums[i] {nums.swapAt(i, nums[i] - 1)}}
    6         for i in 0..<nums.count {if nums[i] != i + 1 {return i + 1}}
    7         return nums.count + 1
    8     }
    9 }

    12ms

     1 class Solution {
     2     func firstMissingPositive(_ nums: [Int]) -> Int {
     3         guard nums.count > 0 else {
     4             return 1
     5         }
     6         var numsCopy = nums
     7         for  i in 0..<nums.count {
     8             while numsCopy[i] > 0 && numsCopy[i] < nums.count && numsCopy[numsCopy[i]-1] != numsCopy[i] {
     9                  numsCopy.swapAt(i, numsCopy[i]-1)
    10             }
    11         }
    12         
    13         for i in 0..<nums.count {
    14             if numsCopy[i] != i + 1 {
    15                 return i + 1
    16             }
    17         }
    18         return nums.count + 1
    19     }
    20 }

    12ms

     1 class Solution {
     2     func firstMissingPositive(_ nums: [Int]) -> Int {
     3     var newNums = nums
     4     for i in 0..<nums.count {
     5         while newNums[i] > i + 1 && newNums[i] <= nums.count && newNums[i] != newNums[newNums[i]-1] {
     6             if newNums[i] <= nums.count && newNums[i] != newNums[newNums[i]-1] {
     7                 let temp = newNums[i]
     8                 newNums[i] = newNums[temp-1]
     9                 newNums[temp-1] = temp
    10             }
    11         }
    12         if newNums[i] > 0 && i + 1 > newNums[i] {
    13             let temp = newNums[i]
    14             newNums[i] = newNums[temp-1]
    15             newNums[temp-1] = temp
    16         }
    17     }
    18     var i = 0
    19     while i < nums.count {
    20         if i + 1 != newNums[i] {
    21             return i + 1
    22         }
    23         i = i + 1
    24     }
    25     return i + 1
    26     }
    27 }

     16ms

     1 class Solution {
     2     func firstMissingPositive(_ nums: [Int]) -> Int {
     3         var set = Set<Int>()
     4         
     5         nums.forEach { set.insert($0) }
     6         
     7         for i in 0..<nums.count {
     8             if !set.contains(i + 1) {
     9                 return i + 1
    10             }
    11         }
    12         
    13         return nums.count + 1
    14     }
    15 }

    16ms

     1 class Solution {
     2     func firstMissingPositive(_ nums: [Int]) -> Int {
     3         if(nums.count == 0){ return 1 }
     4         let maximum = nums.max()!
     5         if(maximum > 0){
     6             for i in 1...maximum{
     7                 if(!nums.contains(i)){
     8                     return i
     9                 }
    10             }
    11         }
    12         return maximum + 1
    13     }
    14 }

    20ms

     1 class Solution {
     2     func firstMissingPositive(_ nums: [Int]) -> Int {
     3         var nums = nums
     4         nums.append(-1)
     5         
     6         if nums.count == 0 {return 1}
     7         if nums.count == 1 {  return nums[0] == 1 ? 2 : 1 }
     8         
     9         for i in 0..<nums.count {
    10             var val = nums[i]
    11             while val < nums.count && val >= 0 && nums[val] != val {
    12                 swap(&nums, i, val)
    13                 val = nums[i]
    14             }
    15             if val != i  {
    16                 nums[i] = -1
    17             }
    18         }
    19         for i in 1..<nums.count {
    20             if nums[i] == -1 {
    21                 return i
    22             }
    23         }
    24         return nums.count
    25     }
    26     
    27     func swap(_ nums: inout [Int], _ i: Int, _ j: Int) {
    28         let temp = nums[i]
    29         nums[i] = nums[j]
    30         nums[j] = temp
    31     }
    32 }

    32ms

    1 class Solution {
    2     func firstMissingPositive(_ nums: [Int]) -> Int {
    3         for i in 1 ..< Int.max {
    4             if !nums.contains(i) { return i }
    5         }
    6         
    7         return Int.max
    8     }
    9 }
  • 相关阅读:
    [HAOI2008]糖果传递
    [HAOI2008]木棍分割
    [HAOI2008]硬币购物
    [ZJOI2008]泡泡堂
    [JSOI2007]建筑抢修
    [JSOI2007]麻将
    [Note]prufer
    [BZOJ3275]Number
    [POI2014]RAJ-Rally
    [JSOI2010]快递服务
  • 原文地址:https://www.cnblogs.com/strengthen/p/9901428.html
Copyright © 2011-2022 走看看