Leetcode 初刷(1)
1、給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)目標(biāo)值 target,請你在該數(shù)組中找出和為目標(biāo)值的那 兩個(gè) 整數(shù),并返回他們的數(shù)組下標(biāo)。
你可以假設(shè)每種輸入只會對應(yīng)一個(gè)答案。但是,你不能重復(fù)利用這個(gè)數(shù)組中同樣的元素。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因?yàn)?nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
方法1:思路簡單,時(shí)間復(fù)雜度高 用時(shí):3124ms,內(nèi)存:12.5MB
def twoSum2(nums,target):#3124ms,12.5MB
for i in range(0,len(nums)):
tmp = target - nums[i]
for j in range(i+1,len(nums)):
if tmp == nums[j]:
return [i,j]
方法2:將只要讀取到的數(shù)據(jù)就存入字典,提高效率 用時(shí):60ms,內(nèi)存:13MB
def twoSum(nums,target):#60ms 13MB
d = {}
for i in range(0,len(nums)):
tmp = target - nums[i]
if tmp in d:
return [d[tmp],i]
else:
d[nums[i]] = i
2、給定一個(gè)字符串,請你找出其中不含有重復(fù)字符的 最長子串 的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 因?yàn)闊o重復(fù)字符的最長子串是 "abc",所以其長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 因?yàn)闊o重復(fù)字符的最長子串是 "b",所以其長度為 1。
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 因?yàn)闊o重復(fù)字符的最長子串是 "wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是一個(gè)子序列,不是子串。
方法1:超出時(shí)間限制
def lengthOfLongestSubstring(s):#超出時(shí)間限制
max_len = 0
for i in range(0,len(s)):
res = ''
for j in range(i,len(s)):
if s[j] in res:
break
else:
res += s[j]
if len(res) > max_len:
max_len = len(res)
return max_len
方法2:利用index找到未重復(fù)字符的下一個(gè)開始存儲到l(l中存的都是不重復(fù)子串),理解起來也很簡單,用時(shí):64ms,內(nèi)存:12.2MB
def lengthOfLongestSubstring4(s): # 'dvdf' 從上一個(gè)重復(fù)位置開始!!!
l = []
res = []
for x in s:
if x not in l:
l.append(x)
else:
res.append(len(l))
i = l.index(x)
l = l[i + 1:]
l.append(x)
res.append(len(l))
return max(res) if res else 0
繼續(xù)加油!在實(shí)際代碼中能不用雙重for循環(huán)就不要用!

浙公網(wǎng)安備 33010602011771號