628.三个数的最大乘积
分析讨论各种情况,可以知道,最大乘积要么是前三个数的乘积,要么是第一个数和最后两个数的乘积。
class Solution(object):
def maximumProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
# 如果一共只有三个数
# prod=1
if(len(nums)==3):
return nums[0]*nums[1]*nums[2]
else:
# 排序,降序
nums.sort(reverse=True)
prod1=nums[0]*nums[1]*nums[2]
prod2=nums[0]*nums[-1]*nums[-2]
return max(prod1,prod2)
1550. 存在连续三个奇数的数组
简单地直接判断即可
class Solution(object):
def threeConsecutiveOdds(self, arr):
"""
:type arr: List[int]
:rtype: bool
"""
flag=False
i=0
while(i<len(arr)-2):
if(arr[i]%2==0):
i=i+1
continue
elif(arr[i+1]%2==0):
i=i+2
continue
elif(arr[i+2]%2==0):
i=i+3
continue
else:
return True
return False
219. 存在重复元素
用字典存储元素及其下标
class Solution(object):
def containsNearbyDuplicate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: bool
"""
dct={}
for i in range(len(nums)):
if(nums[i] in dct and dct[nums[i]]>=(i-k)):
return True
dct[nums[i]]=i
return False
228. 汇总区间
class Solution(object):
def summaryRanges(self, nums):
"""
:type nums: List[int]
:rtype: List[str]
"""
# 这个数组是有序的
ret=[]
i=0
while(i<len(nums)):
sub=""
sub=sub+str(nums[i])
j=i+1
while(j<len(nums) and (j-i)==(nums[j]-nums[i])):
j=j+1
if(j-1>i):
sub=sub+"->"
sub=sub+str(nums[j-1])
# ret.append(str(j-1))
i=j
ret.append(sub)
return ret