class Solution: def missingNumber(self, nums) -> int: a=len(nums) i=a while i>=0: if i in nums: i-=1 else: return i
执行用时 :2424 ms, 在所有 Python3 提交中击败了5.05%的用户
内存消耗 :14.9 MB, 在所有 Python3 提交中击败了5.36%的用户
双指针:
效果差不多,没多少改进:
class Solution: def missingNumber(self, nums) -> int: a=len(nums) i=a j=0 while j<=i: if i in nums and j in nums: i-=1 j+=1 elif i not in nums: return i else: return j
执行用时 :2292 ms, 在所有 Python3 提交中击败了5.05%的用户
内存消耗 :14.9 MB, 在所有 Python3 提交中击败了5.36%的用户
继续改进。。。:
class Solution: def missingNumber(self, nums) -> int: i=len(nums) j=0 nums.sort() b=[i for i in range(len(nums)+1)] for t in range(i): if nums[t]!=b[t]: return b[t] else: return b[-1]
执行用时 :276 ms, 在所有 Python3 提交中击败了21.58%的用户
内存消耗 :14.7 MB, 在所有 Python3 提交中击败了5.36%的用户
效果仍然不够好。。。
继续改进。。。。
class Solution: def missingNumber(self, nums) -> int: i=len(nums) j=0 nums.sort() b=[i for i in range(len(nums)+1)] k=0 while k<len(nums) and b[k]==nums[k]: k+=1 return b[k]
执行用时 :208 ms, 在所有 Python3 提交中击败了48.09%的用户
内存消耗 :14.9 MB, 在所有 Python3 提交中击败了5.36%的用户
for 循环还是比较慢。
上面有两句话用不到,就删了:
class Solution: def missingNumber(self, nums) -> int: nums.sort() b=[i for i in range(len(nums)+1)] k=0 while k<len(nums) and b[k]==nums[k]: k+=1 return b[k]
执行用时 :196 ms, 在所有 Python3 提交中击败了66.24%的用户
内存消耗 :15 MB, 在所有 Python3 提交中击败了5.36%的用户
还应该怎样改进呢?
看了别人执行用时为40ms的例子,从数学的角度出发,好巧妙啊,我怎么就想不到。。。
class Solution: def missingNumber(self, nums: List[int]) -> int: return int((len(nums)*(len(nums)+1)/2)-sum(nums))
但是很奇怪的是,同样的程序,我一执行就用时不一样了,而且每次都不一样,跨度还挺大。
执行用时 :180 ms, 在所有 Python3 提交中击败了75.23%的用户
内存消耗 :15 MB, 在所有 Python3 提交中击败了5.36%的用户
——2019.10.9