leetcode刷題記錄 2018 7 13

2021-08-21 10:37:24 字數 2906 閱讀 8932

1.有效的括號

給定乙個只包括'('')''''['']'的字串,判斷字串是否有效。

有效字串需滿足:

左括號必須用相同型別的右括號閉合。

左括號必須以正確的順序閉合。

注意空字串可被認為是有效字串。

示例 1:

輸入: "()"

輸出: true

示例 2:

輸入: "(){}"

輸出: true

示例 3:

輸入: "(]"

輸出: false

示例 4:

輸入: "([)]"

輸出: false

示例 5:

輸入: ""

輸出: true

分析:可以想到使用棧結構,遇到左括號進棧,遇到右括號時,判斷棧是否為空以及該右括號是否和棧頂元素匹配,如果空棧or不匹配,return false,如果可以匹配,刪除棧頂元素,繼續執行for迴圈。最後判斷棧是否為空,若空返回true,不空返回false。

**:

class solution:

def isvalid(self, s):

""":type s: str

:rtype: bool

"""dic = '}

list1 =

for case in s:

if case in dic.keys():

elif case in dic.values():

if len(list1) == 0 or dic.get(list1[-1]) != case:

return false

else:

list1.pop()

if len(list1) == 0:

return true

else:

return false

2.四數之和

給定乙個包含 n 個整數的陣列nums和乙個目標值target,判斷nums中是否存在四個元素 a,b,c 和 d ,使得 a + b + c +d 的值與target相等?找出所有滿足條件且不重複的四元組。

注意:答案中不可以包含重複的四元組。

示例:

給定陣列 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

滿足要求的四元組集合為:

[ [-1, 0, 0, 1],

[-2, -1, 1, 2],

[-2, 0, 0, 2]

]

四數之和問題,最開始想利用itertools庫,通過排列組合後計算,但是嘗試了很多次,還是有問題。解答方法成功了兩種,一下分別介紹一下。

class solution:

def foursum(self,nums, target):

nums.sort()

res =

for i in range(len(nums)):

for j in range(i+1,len(nums)):

if (j > i + 1 and nums[j] == nums[j - 1]) :

continue;

left = j+1

right = len(nums)-1

while left < right:

sum1 = nums[i]+nums[j]+nums[left]+nums[right]

if sum1 < target:

left = left + 1

elif sum1 == target:

left = left + 1

right = right - 1

else:

right = right - 1

cases = #會有重複的結果,乾脆直接在後邊刪掉了

for case in res:

if case not in cases:

return cases

法二:雜湊表,複雜度比法一要低。

class solution:

def foursum(self, nums, target):

""":type nums: list[int]

:type target: int

:rtype: list[list[int]]

"""res, dicti = set(), {}

numlen = len(nums)

nums.sort()

for i in range(numlen):

for j in range(i+1, numlen):

key = nums[i] + nums[j]

if key not in dicti.keys():

dicti[key] = [(i,j)]

else:

for i in range(numlen):

for j in range(i+1, numlen-2):

exp = target - nums[i] -nums[j]

if exp in dicti.keys():

for tmpindex in dicti[exp]:

if tmpindex[0] > j:

res.add((nums[i], nums[j], nums[tmpindex[0]], nums[tmpindex[1]]))

return [list(i) for i in res]

leetcode刷題記錄

我覺得每天來兩道,練習練習,再看看人家是怎麼優化的。1.給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。c 暴力求解,204ms,9.1m class solution for index,num in enumerate ...

LeetCode刷題記錄

動態規劃和貪心演算法的異同點 class solution throw newruntimeexception 時間複雜度 o n 2 對於每個元素,我們試圖通過遍歷陣列的其餘部分來尋找它所對應的目標元素,這將耗費 o n o n 的時間。因此時間複雜度為 o n 2 需要一種方法,尋找符合要求的元...

leetcode刷題記錄

工作之餘刷刷題排解下寂寞 1 面試題66.構建乘積陣列 解題思路 題目要求可以簡化為求陣列中任意乙個元素左右兩邊所有元素的乘積。偷懶就用了乙個套路,練習了p c c python class solution def constructarr self,a list int list int 除法是...