★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(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 }