5.5刷leetcode有感
题136只出现一次的数字
题169 多数元素
两道题都很简单,主要手法加入
from collections import Counter
// 统计出现的次数
nums = [2,2,1,1,1,2,2]
result = Counter(nums)
//结果
Counter({2: 4, 1: 3})
//遍历方法
for i in result.keys():
print(result[i])
//结果4,3;这里不要忘记是keys()
题15三数之和比较难
思路:
定一个动两个,定的那一个
class Solution(object):
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
result = []
nums.sort(key=None,reverse=False)
#[-4,-1,-1,0,1,2]
for i in range(len(nums)-2):#i是定的一个,可以是[-4,-1,-1,0]
if i==0 or nums[i]!=nums[i-1]:#目的是为了定的一个不重复,但是i=0时没有i-1;这里的问题就是能不能改成nums[i]!=nums[i+1],不能,因为后面两个值是动的
start = i+1
end = len(nums)-1
while(start<end):
if nums[i]+nums[start]+nums[end]==0:
pos = [nums[i],nums[start],nums[end]]
result.append(pos)
start = start+1
end = end-1#跳出来继续寻找
while start<end and nums[start]==nums[start-1]:#对于一样的值平滑处理
start = start+1
while start<end and nums[end]==nums[end+1]:#对于一样的值平滑处理
end = end-1
elif nums[i]+nums[start]+nums[end]>0:#当值偏大了,只能让大值变小
end = end-1
elif nums[i]+nums[start]+nums[end]<0:#当值偏小了,只能让小值变大
start = start+1
return result
今天就写了3道题,反正还有很久很久才找工作,慢慢刷啦!