[Swift]LeetCode448. 找到全部數組中消失的數字 | Find All Numbers Disappeared in an Array

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-auaxyeun-gs.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.git

Find all the elements of [1, n] inclusive that do not appear in this array.github

Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.數組

Example:微信

Input:
[4,3,2,7,8,2,3,1]

Output:
[5,6]

給定一個範圍在  1 ≤ a[i] ≤ n ( n = 數組大小 ) 的 整型數組,數組中的元素一些出現了兩次,另外一些只出現一次。app

找到全部在 [1, n] 範圍之間沒有出如今數組中的數字。this

您能在不使用額外空間且時間複雜度爲O(n)的狀況下完成這個任務嗎? 你能夠假定返回的數組不算在額外空間內。spa

示例:code

輸入:
[4,3,2,7,8,2,3,1]

輸出:
[5,6]

80ms
 1 class Solution {
 2     func findDisappearedNumbers(_ nums: [Int]) -> [Int] {
 3         
 4         var input = nums
 5         var result: [Int] = []
 6         
 7         for i in 0..<input.count{
 8             var check = -1
 9             
10             if input[i] > 0{
11                 check = input[i] - 1
12             }else{
13                 check = (input[i] * (-1)) - 1
14             }
15             
16             if input[check] > 0{
17                 input[check] = (input[check] * (-1))
18             }
19             
20         }
21         
22         for i in 0..<input.count{
23             if input[i] > 0 {
24                 result.append(i+1)
25             }
26         }
27         
28         return result
29     }
30 }

88mshtm

 1 class Solution {
 2     func findDisappearedNumbers(_ nums: [Int]) -> [Int] {
 3         var list = nums
 4         var results = [Int]()
 5 
 6         for i in 0 ..< list.count {
 7             let idx = abs(list[i]) - 1
 8             list[idx] = (list[idx] > 0) ? -list[idx] : list[idx]
 9         }
10 
11         for i in 0 ..< list.count {
12             if (0 < list[i]) {
13                 results.append(i + 1)
14             }
15         }
16 
17         return results
18     }
19 }

104ms

 1 class Solution {
 2     func findDisappearedNumbers(_ nums: [Int]) -> [Int] {
 3         let test = 0
 4         if test == 0 {        
 5             var result = [Int]()
 6             var explored = [Bool](repeating: false, count: nums.count+1)
 7 
 8             for num in nums {
 9                 explored[num] = true
10             }
11 
12             var i = 1
13             while i < explored.count {
14                 if explored[i] == false {
15                     result.append(i)
16                 }
17 
18                 i += 1
19             }
20 
21             return result
22         }
23         
24         if test == 1 {        
25             var result = [Int]()
26             var nums = nums
27 
28             var i = 0
29             while i < nums.count {
30                 while nums[i] != nums[nums[i]-1] {
31                     nums.swapAt(i, nums[i]-1)
32                 }
33 
34 
35                 i += 1
36             }
37 
38             var j = 0
39             while j < nums.count {
40                 if j+1 != nums[j] {
41                     result.append(j+1)
42                 }
43 
44                 j += 1
45             }
46 
47             return result
48         }
49     }
50 }

112ms

 1 class Solution {
 2     func findDisappearedNumbers(_ nums: [Int]) -> [Int] {
 3         var nums = nums
 4         for idx in 0..<nums.count {
 5             let nextIdx = abs(nums[idx]) - 1
 6             nums[nextIdx] = nums[nextIdx] < 0 ? nums[nextIdx] : -nums[nextIdx]
 7         }
 8         var ans = [Int]()
 9         for idx in 0..<nums.count {
10             if nums[idx] > 0 {
11                 ans.append(idx + 1)
12             }
13         }
14         return ans
15     }
16 }

124ms

 1 class Solution {
 2     func findDisappearedNumbers(_ nums: [Int]) -> [Int] {
 3         var nums = nums
 4 
 5         for i in 0..<nums.count {
 6             if nums[abs(nums[i]) - 1] > 0 {
 7                 nums[abs(nums[i]) - 1] *= -1
 8             }
 9         }
10 
11         var res = [Int]()
12 
13         for i in 0..<nums.count {
14             if nums[i] > 0 {
15                 res.append(i + 1)
16             } else {
17                 nums[i] *= -1
18             }
19         }
20 
21         return res
22     }
23 }
相關文章
相關標籤/搜索