leetcode 全解(python版)

本着blabla的精神,在這裏(可能會)給出leetcode的所有習題答案 --持續更新中...數組

1.給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。app

   ps:這個好簡單,好容易理解aaa,,BUT是個反例,,執行用時超過限制...spa

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的解法code

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.給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。blog

    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
相關文章
相關標籤/搜索