第一题:括号的最大嵌套深度
解题思路:
还是和有效括号思路一样,将左括号压入栈中,如果遇到右括号,先计算一下栈中左括号的个数,左括号的个数就代表第几层。
代码:
class Solution:
def maxDepth(self, s: str) -> int:
stack=[]
flag=[]
for i in s:
if i=='(':
stack.append(i)
elif i==')':
flag.append(len(stack))
stack.pop()
else:
pass
if flag:
return max(flag)
else:
return 0
除了要创建一个栈stack,还要创建一个空列表flag,储存所有括号的深度,返回最大的值即最大的嵌套深度。
注意:
列表的max(list)方法当list为空列表时会报错。
第二题:商品折扣后的最终价格
------------------------------------------------------------------------------------------------------------------------
(这道题我有一个小误区。)
题目:
解题思路:
其实就是给定一个价格数组,让你最终输出一个最终价格数组,最终价格数组的每个元素由什么构成的呢?
是由给出的价格数组中的元素减去下标大于它但是数字小于它的元素构成的,如果这个元素后边(下标大于它)没有数字小于它的,那就由该元素构成。
第一时间想到的就是遍历
题解:
代码(错误代码,这个代码里边有一个小误区):
class Solution:
def finalPrices(self, prices: List[int]) -> List[int]:
terminalPrice=[]
n=len(prices)
for i,p in enumerate(prices):
discount=0
for j in range(i+1,n):
if prices[j] <= p:
discount=prices[j]
terminalPrice.append(prices[i]-discount) #
break
return terminalPrice
比如说数组的长度是5,当i=4的时候,j遍历的时候就是range(5,5),这个时候j根本不会取值,所以不会进入到第二层循环。也就是说如果输入的数组长度是5,那么输出的数组长度只有4,但是将倒数第三行代码换个位置就解决了。
代码:(正确)
class Solution:
def finalPrices(self, prices: List[int]) -> List[int]:
terminalPrice=[]
n=len(prices)
for i,p in enumerate(prices):
discount=0
for j in range(i+1,n):
if prices[j] <= p:
discount=prices[j]
break
terminalPrice.append(prices[i]-discount)
return terminalPrice
这样就算不进入第二层循环,数组也不会少一个元素。
时间复杂度:
因为由两层遍历,所以时间复杂度为O(n)。
题解还有另一种时间复杂度低的方法,之后更新。