LeetCode丟失的數字Swift
阿新 • • 發佈:2021-01-07
給定一個包含 [0, n]中n個數的陣列 nums ,找出 [0, n] 這個範圍內沒有出現在陣列中的那個數。
進階:
你能否實現線性時間複雜度、僅使用額外常數空間的演算法解決此問題?
示例 1:
輸入:nums = [3,0,1] 輸出:2 解釋:n = 3,因為有 3 個數字,所以所有的數字都在範圍 [0,3] 內。2 是丟失的數字,因為它沒有出現在 nums 中。
示例 2:
輸入:nums = [0,1] 輸出:2 解釋:n = 2,因為有 2 個數字,所以所有的數字都在範圍 [0,2] 內。2 是丟失的數字,因為它沒有出現在 nums 中。
示例 3:
輸入:nums = [9,6,4,2,3,5,7,0,1] 輸出:8 解釋:n = 9,因為有 9 個數字,所以所有的數字都在範圍 [0,9] 內。8 是丟失的數字,因為它沒有出現在 nums 中。
示例 4:
輸入:nums = [0] 輸出:1 解釋:n = 1,因為有 1 個數字,所以所有的數字都在範圍 [0,1] 內。1 是丟失的數字,因為它沒有出現在 nums 中。
提示:
n == nums.length
1 <= n <= 104
0 <= nums[i] <= n
nums 中的所有數字都 獨一無二
思路一:數學計算(1、2、3、4......n 求和公式為 S = n * (A1 + An) / 2)
class Solution { func missingNumber(_ nums: [Int]) -> Int { let aMax = nums.count let Sum = (1 + aMax) * aMax / 2 let arraySum = nums.reduce(0, +) return Sum - arraySum } }
思路二:按位異或(下標的位置理應是下標那個值,如果值=下標,兩個異或為0)
class Solution { func missingNumber(_ nums: [Int])-> Int { var aMax = nums.count for i in 0..<nums.count { aMax = aMax^i^nums[i] } return aMax } }