leecode刷题第四天
1.题目如下:
今天的第一题,三数之和,首先要对数组进行排序,是一个遍历的算法,要使用三个指针指向三个位置,i从数组头第一个元素一直遍历到倒数第三个元素,每一个遍历i时,start开始指向i+1,end一开始指向倒数第一个元素,判断这三个数之和是否等于0,若大于零则end–,若小于0则start++,这样一直循环直到start不小于end,跳出循环,再i+1.
以下是代码:
def threeSum(nums):
n=len(nums)
if n<3:
return []
res=[]
nums.sort()#将nums进行排序
for i in range(n-2):
if nums[i]>0:
return res
if i>0 and nums[i]==nums[i-1]:
continue
start=i+1
end=n-1
while(start<end):
if nums[i]+nums[start]+nums[end]==0:
res.append([nums[i],nums[start],nums[end]])
while start<end and nums[start]==nums[start+1]:
start+=1
while start<end and nums[end]==nums[end-1]:
end-=1
start+=1
end-=1
elif nums[i]+nums[start]+nums[end]<0:
start+=1
else :
end-=1
return res
2.有效的括号,题目如下:
这道题是一道括号匹配,要用到栈来进行存储,首先创建一个dict用来以键值对的形式来存储匹配的括号,遍历待匹配的括号序列s,当s[i]是键时,将对应的键值入栈,若不是键时将栈中出栈一个元素判断两者是否相等,若相等则继续进行匹配,若不想等则直接返回false,到遍历完后还要判断栈中是否还有元素,若还有元素也返回false.以下是代码:
class Solution:
def isValid(self, s: str) -> bool:
n=len(s)
if n==0:
return True
if n==1:
return False
a=[]
maps={'(':')','{':'}','[':']'}
for i in range(n):
if s[i] in maps.keys():
a.append(maps[s[i]])
continue
else:
if len(a)==0:#如果没有左括号对应的值入栈而直接是右括号,直接返回错误
return False
elif s[i]==a.pop():
continue
else:
return False
if len(a)!=0:
return False
else:
return True