代码随想录算法训练营第四十八天|739. 每日温度、496. 下一个更大元素、503. 下一个更大元素II
1 leetcode739. 每日温度
文章链接:代码随想录
视频链接:单调栈,你该了解的,这里都讲了!LeetCode:739.每日温度_哔哩哔哩_bilibili
思路:就真的是暴力搜索来写这道题目,但是呢,有些示例里面就超时了,至少有点思路了吧,也算是好消息
1.1 自己的方法
能通过一部分的示例测试,不能完全通过
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
result = []
for i in range(len(temperatures)):
answer = 0
for j in range(i+1,len(temperatures)):
if temperatures[j]>temperatures[i]:
answer =j-i
break
result.append(answer)
return result
1.2 视频后的方法
就是有点忘记了,在python语言中的栈是如何表示的了,后来看解析想起来其实用数组就很好表示了
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
stack = [0]
result = [0]*len(temperatures)
for i in range(1,len(temperatures)):
if temperatures[i]<=temperatures[stack[-1]]:
stack.append(i)
else:
while len(stack) != 0 and temperatures[i]>temperatures[stack[-1]]:
result[stack[-1]] = i-stack[-1]
stack.pop()
stack.append(i)
return result
1.3 本题小结
- 真的试个挺巧妙的方法的,因为现在掌握的不是那么牢固,所以现就学会一种方法吧
- 这个题的栈,对于python而言用数组表示是真的很方便,虽然现在知道还有其他语言可以用,但是我不是很熟悉呀
2 leetcode496. 下一个更大元素
题目链接:496. 下一个更大元素 I - 力扣(LeetCode)
文章链接:代码随想录
视频链接:单调栈,套上一个壳子就有点绕了| LeetCode:496.下一个更大元素_哔哩哔哩_bilibili
思路:不是很会,不知道应该怎么放,说实话呀,看了以后不是不会,是觉得这个思路是真的超级绕
2.1 视频后的思路
中间多了一个映射的关系,但是其他的内容,没有任何区别吧
class Solution:
def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
result = [-1]*len(nums1)
stack = [nums2[0]]
for i in range(1,len(nums2)):
if nums2[i]<=stack[-1]:
stack.append(nums2[i])
else:
while len(stack)!=0 and nums2[i]>stack[-1]:
if stack[-1] in nums1:
index = nums1.index(stack[-1])
result[index] = nums2[i]
stack.pop()
stack.append(nums2[i])
return result
2.2 本题小结
- 主要是开始的时候,不知道for循环里面应该放什么,然后我就不知道怎么写了,卡在那里了,然后就是什么时候判断栈在数组1中的位置,我也懵了一下
- 其实思路真的跟上一题差不多,就是自己晕了两下,不知道那两个小位置怎么写吧
3 leetcode503.下一个更大元素II
题目链接:503. 下一个更大元素 II - 力扣(LeetCode)
文章链接:代码随想录
视频链接:单调栈,成环了可怎么办?LeetCode:503.下一个更大元素II_哔哩哔哩_bilibili
思路:就是不知道循环怎么处理吧,主要就是这里有点卡住了
3.1 看解析后的方法
将这个数组变成循环的方法,我没有想到,哈哈哈哈哈哈,但是确实很聪明
class Solution:
def nextGreaterElements(self, nums: List[int]) -> List[int]:
result = [-1]*len(nums)
stack = []
for i in range(len(nums)*2):
while len(stack) != 0 and nums[i%len(nums)]>nums[stack[-1]]:
result[stack[-1]] = nums[i%len(nums)]
stack.pop()
stack.append(i%len(nums))
return result
3.2 本题小结
- 这里主要就是一个小点,如何将数组进行一个循环,这里当时卡住了,但是这个方法,确实想了一下,有效的解决了
- 还是要多去看,多理解吧,多去思考
4 今日小结
- 今天感觉做题的状态不是很对,脑袋一直是有一点晕乎乎的感觉吧
- 这个主要问题吧,就是在里面的一些小地方,处理的时候呢,我自己做就不知道怎么写了,继续往后练习,就当提升自己的思路吧

浙公网安备 33010602011771号