网站的产品中心怎么做,佳木斯网站建设公司,wordpress 提交熊掌,域名交易网站源代码下载清单
● 739. 每日温度 ● 496. 下一个更大元素 I
LeetCode #739 每日温度
1. 题目
给定一个整数数组 temperatures#xff0c;表示每天的温度#xff0c;返回一个数组 answer#xff0c;其中 answer[i] 是指对于第 i 天#xff0c;下一个更高温度出现在几天后。如果气…清单
● 739. 每日温度 ● 496. 下一个更大元素 I
LeetCode #739 每日温度
1. 题目
给定一个整数数组 temperatures表示每天的温度返回一个数组 answer其中 answer[i] 是指对于第 i 天下一个更高温度出现在几天后。如果气温在这之后都不会升高请在该位置用 0 来代替。
2. 思路
暴力解法: 两层for循环遍历数组一层用于遍历一层用于比较。时间复杂度: O(n^2) 单调栈解法: 遍历一次数组。时间复杂度: O(n)
3. 代码实现
class Solution:def dailyTemperatures(self, temperatures: List[int]) - List[int]:#暴力解法:answer [0] * len(temperatures)for i in range(len(temperatures)): #遍历数组for j in range(i,len(temperatures)): #遍历当前元素之后的其余元素找出大于当前元素的元素并记录if temperatures[j] temperatures[i]:answer[i] j - ibreakreturn answer#单调栈: -- 栈的特性 -- 先进后出 -- 记录小于栈顶元素的元素脚标如果栈顶元素小于当前元素弹出并计算脚标差否则入栈answer_step [0] * len(temperatures)stack []for i in range(len(temperatures)):while len(stack) 0 and temperatures[i] temperatures[stack[-1]]:answer_step[stack[-1]] i - stack[-1]stack.pop()stack.append(i)return answer_stepLeetCode #496 下一个更大元素 I
1. 题目
nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置右侧的第一个比 x 大的元素。 给你两个没有重复元素的数组 nums1 和 nums2 下标从 0 开始计数其中nums1 是 nums2 的子集。 对于每个 0 i nums1.length找出满足 nums1[i] nums2[j] 的下标 j 并且在 nums2 确定 nums2[j] 的下一个更大元素。如果不存在下一个更大元素那么本次查询的答案是 -1。 返回一个长度为 nums1.length 的数组 ans 作为答案满足 ans[i] 是如上所述的下一个更大元素 。
2. 思路
暴力解法: 两层for循环遍历数组一层用于遍历一层用于比较。时间复杂度: O(n^2) 单调栈解法: 遍历一次数组。时间复杂度: O(n)
3. 代码实现
#暴力解法
class Solution:def nextGreaterElement(self, nums1: List[int], nums2: List[int]) - List[int]:answer [0] * len(nums1)for i in range(len(nums1)): #遍历数组nums1found Falsefor j in range(len(nums2)): #遍历nums2搜寻符合要求元素if nums2[j] nums1[i]:for h in range(j1, len(nums2)):if nums2[h] nums1[i]:answer[i] nums2[h]found Truebreakif not found:answer[i] -1breakreturn answer
#单调栈
lass Solution:def nextGreaterElement(self, nums1: List[int], nums2: List[int]) - List[int]:answer_step [-1] * len(nums1)stack [0]for i in range(1, len(nums2)):if nums2[i] nums2[stack[-1]]:stack.append(i)else:while len(stack) ! 0 and nums2[i] nums2[stack[-1]]:if nums2[stack[-1]] in nums1:index nums1.index(nums2[stack[-1]])answer_step[index] nums2[i]stack.pop()stack.append(i)return answer_step