給定乙個包含 0, 1, 2, ..., n 中 n 個數的序列,找出 0 .. n 中沒有出現在序列中的那個數。
示例 1:
輸入: [3,0,1]
輸出: 2
示例 2:
輸入: [9,6,4,2,3,5,7,0,1]
輸出: 8
說明:你的演算法應具有線性時間複雜度。你能否僅使用額外常數空間來實現?
第一種思路:
數學法,把 0 ~ n的數字之和,減去sum(nums),即可得到缺失數的值。
class solution(object):
def missingnumber(self, nums):
""":type nums: list[int]
:rtype: int
"""n = len(nums)
return n * (n + 1) /2 - sum(nums)
第二種思路:
位運演算法,利用xor的性質 a ^ a = 0, 把nums裡的所有的下標 和 元素的值都xor一下,即可得到缺失數。
注意res需要初始化為 len(nums), 因為 下標最大只會為 len(nums) - 1。
class solution(object):
def missingnumber(self, nums):
""":type nums: list[int]
:rtype: int
"""res = len(nums)
for i, num in enumerate(nums):
res ^= i ^ num
return res
第三種思路:
轉集合,然後遍歷0 ~ n 看在不在集合裡。
class solution(object):
def missingnumber(self, nums):
""":type nums: list[int]
:rtype: int
"""s = set(nums)
for num in range(len(nums)):
if num not in s:
return num
return len(nums)
leetcode,python2 最大子序和
給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。class so...
LeetCode Python 打家劫舍I
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...
leetcode Python編碼練習
貪心演算法 1.環形路上有n個加油站,第i個加油站的汽油量是gas i 你有一輛車,車的油箱可以無限裝汽油。從加油站i走到下乙個加油站 i 1 花費的油量是cost i 你從乙個加油站出發,剛開始 的時候油箱裡面沒有汽油。求從哪個加油站出發可以在環形路上走一圈。返回加油站的下標,如果沒有答案的話返回...