Q217. Contains Duplicate https://leetcode.com/problems/contains-duplicate/
判断数组中是否存在冗余项,若有重复项则返回True,否则返回False
idea:
利用 list 的count(i) 函数,判断list种的每个元素i,nums.count(i)是否≥2,若是,则返回True,break。
class Solution(object):
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
for i in range(0,len(nums)):
if nums.count(nums[i]) >=2:
return True
return False
超时!
discussion 解决方案1:
将数组元素排序,若nums[i] == nums[i+1],则说明有重复项,返回True;若循环至数组末端都没有出现重复项则返回False
class Solution(object):
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
nums.sort()
for i in range(0,len(nums)-1):
if nums[i] == nums[i+1]:
return True
return False
Q268. Missing Number https://leetcode.com/problems/missing-number/
给定一组包含n个不同数据的数组,数组元素是从0,1,2...n中选出的,求missing number。
idea:
构建原始数组list :[0,1,2,...,n],依次遍历list元素,若list[i] not in nums,则 list[i] 就是missing number。
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)+1
for i in range(0,n,1):
if i not in nums:
return i
耗时较多!not in 也需要依次比较,因此时间复杂度为O(N2)
discussion 解决方案1:
将nums元素进行排序—遍历nums元素—expect_num = nums[i]+1—判断后一个元素是否等于expect_num
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
if nums[-1] != len(nums):
return len(nums)
elif nums[0] != 0:
return 0
for i in nums:
expect_num = i+1
if nums[i+1] != expect_num:
return expect_num
knowledge:
注意首尾为missing number的情况。
discussion 解决方案2:
sum大法:
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
expect_sum = sum(range(len(nums)+1))
nums_sum = sum(nums)
return expect_sum-nums_sum
后面两种解决方案时间大大缩短了