leetcode题库和测试平台中文版:https://leetcode-cn.com/problemset/all/
也不知道是不是我网速的问题,想测试程序,很多时间都浪费在打不开网页,待审状态。。。以下题目自己随机挑选,自己瞎琢磨,有比较繁琐的地方还请大家指正,不定时更新,希望早日刷完题库,拿到offer。
这个问题当然可以用简单的嵌套循环做,但是你会发现,速度很慢,怎么提高速度呢,当然是减少遍历次数,解决方案中我最纠结的点有两个:
以下两种方法是自己琢磨的,虽然速度不算最快,起码通过了leetcode,代码如下
# 解法一:偷梁换柱
def twoSum(self, nums, target):
for ii in range(len(nums)):
yy = target-nums[ii]
if (yy in nums) and (nums[ii] != yy):
return sorted([ii,nums.index(yy)])
elif (yy in nums) and (nums[ii] == yy):
nums[ii] = "aa"
if (yy in nums):
return sorted([ii,nums.index(yy)])
# 解法二:enumerate
def twoSum(self, nums, target):
lis = []
for index, value in enumerate(nums):
if value == target -value:
lis.append(index)
if len(lis) == 2:
return lis[:2]
break
else:
if (target-value) in nums:
return sorted([index, nums.index(target-value)])
break
这个比较简单,但是如果简单遍历整个列表,就会很慢,于是我先把列表去重(用set),再进行遍历,速度快了很多。
def majorityElement(self, nums):
set_test = set(nums)
for num in set_test:
aa = nums.count(num)
if aa > len(nums)//2:
return num
break
这个题目用递归做当然是最快啦。但是感觉字符串的翻转程序比较好写,就内部定义了一个程序,先把整数转换成字符串再反转,再转换回来。
def reverse(self,x):
def rev(y):
if y == '':
return ''
return y[-1]+rev(y[:-1])
if (x > 0) and (int(rev(str(x))) < 2**31-1):
return int(rev(str(x)))
elif (x < 0) and (-int(rev(str(-x))) > -2**31):
return -int(rev(str(-x)))
else:
return 0