开始刷 leetcode, 简单笔记下自己的答案, 目标十一结束之前搞定所有题目.
提高一个要求, 所有的答案执行效率必须要超过 90% 的 python 答题者.
1. Two Sum.
classSolution(object):deftwoSum(self, nums, target):""":type nums: List[int]
:type target: int
:rtype: List[int]"""tmp=[]for i, j inenumerate(nums):
tmp.append((i, j))for k, item inenumerate(tmp):
l, m=itemfor o, p in tmp[k+1:]:if m + p ==target:return sorted((l, o))
runtime beats: 21.30%
优化1
classSolution(object):deftwoSum(self, nums, target):""":type nums: List[int]
:type target: int
:rtype: List[int]"""
for i, j inenumerate(nums):for k, l in enumerate(nums[i+1:]):if j + l ==target:return (i, k + i + 1)
runtime beats: 21.97%
还是不行, 肯定还有别的办法.
2. Add Two Numbers
#Definition for singly-linked list.#class ListNode(object):#def __init__(self, x):#self.val = x#self.next = None
classSolution(object):defaddTwoNumbers(self, l1, l2):""":type l1: ListNode
:type l2: ListNode
:rtype: ListNode"""
defgen(listnode):yieldlistnode.valwhilelistnode.next:
listnode=listnode.nextyieldlistnode.valdefizip_longest(gen1, gen2):
flag1, flag2=True, Truetry:
i=gen1.next()except:
i=0
flag1=Falsetry:
j=gen2.next()except:
j=0
flag2=Falseyieldi, jwhile flag1 orflag2:try:
i=gen1.next()except:
i=0
flag1=Falsetry:
j=gen2.next()except:
j=0
flag2=Falseif flag1 orflag2:yieldi, j
result=[]
tmp=0for i, j inizip_longest(gen(l1), gen(l2)):
sum= i + j +tmpif sum < 10:
tmp=0
result.append(sum)else:
tmp= 1result.append(sum- 10)iftmp:
result.append(tmp)return result
runtime beats: 95.07%
用 python 刷题是有点不要脸了, 本题的关键是 itertools.izip_longest, 但是平台说不认识, 于是就自己攒了一个极端丑陋的版本. 有时间回头再优化.
3. Longest Substring Without Repeating Characters
classSolution(object):deflengthOfLongestSubstring(self, s):""":type s: str
:rtype: int"""
if nots:return0
tmp=set(s)
length_tmp=len(tmp)
length=len(s)while length_tmp >0:for i in xrange(length - length_tmp + 1):
t= s[i:length_tmp +i]if len(set(t))
if set(t) <=tmp:returnlength_tmp
length_tmp-=