leetcode 全解(python版)
本着blabla的精神,在这里(可能会)给出leetcode的全部习题答案 --持续更新中...
1.给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
ps:这个好简单,好容易理解aaa,,BUT是个反例,,执行用时超过限制...
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: l = len(nums) for i in range(l): for j in range(l): if nums[i] + nums[j] == target and (not i == j): return (i,j)
下面系正确且耗时非常OK的解法
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: n = len(nums) lookup = {} for i in range(n): tmp = target - nums[i] if tmp in lookup: return [lookup[tmp], i] lookup[nums[i]] = i
3.给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
ps1:明明直接len(l)就已经解决了的,非要把l打印出来看着,用什么left,right来计算最长子串长度,折腾了一天也没计算明白,len(l)出来结果那一瞬间哭辽
ps2:内存消耗太大,等待修正中...
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: l = [] # 记录遍历过的字符 count = 0 # 记录每一个无重复字符的字串的长度 max_num = 0 # 记录所有子串最长长度 if len(s) == 0: return 0 if len(s) == 1: return 1 for c in s: if c not in l: l.append(c) count = len(l) else: if l.index(c) == len(l): #如果是重复的字符为列表中最后一个,例如abcc l = [].append(c) l = l[l.index(c) + 1 :] l.append(c) if count >= max_num: max_num = count return max_num