当前位置:首页 > 编程笔记 > 正文
已解决

代码随想录打卡第六十天|● 739. 每日温度 ● 496.下一个更大元素 I

来自网友在路上 178878提问 提问时间:2023-11-04 08:46:36阅读次数: 78

最佳答案 问答题库788位专家为你答疑解惑

739. 每日温度

题目: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
在这里插入图片描述
题目链接: 739. 每日温度
解题思路:
维持一个递减的单调栈,一旦,没有递减 进行出栈 当前元素大于栈顶元素则说明栈顶元素找到下一个更高温度,记录结果并出栈
代码:

class Solution {public int[] dailyTemperatures(int[] temperatures) {int[] res=new int[temperatures.length];Stack<Integer> zhan=new Stack<Integer>();for(int i=0;i<temperatures.length;i++){if(zhan.isEmpty()){zhan.push(i);}else{while(!zhan.isEmpty()&&temperatures[i]>temperatures[zhan.peek()]){res[zhan.peek()]=i-zhan.peek();zhan.pop();}zhan.push(i);}}return res;}
}

496.下一个更大元素 I

题目: 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] 是如上所述的 下一个更大元素 。
在这里插入图片描述
在这里插入图片描述

题目链接: 496. 下一个更大元素 I
解题思路及代码如下:

        //暴力法//遍历nums1 在nums2中找nums1下一个更大//单调栈法 使用map存储nums1 对nums2使用单调栈发 将值赋给nums1的对应位置
class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {Stack<Integer> temp = new Stack<>();int[] res = new int[nums1.length];Arrays.fill(res,-1);HashMap<Integer, Integer> hashMap = new HashMap<>();for (int i = 0 ; i< nums1.length ; i++){hashMap.put(nums1[i],i);}temp.add(0);for (int i = 1; i < nums2.length; i++) {if (nums2[i] <= nums2[temp.peek()]) {temp.add(i);} else {while (!temp.isEmpty() && nums2[temp.peek()] < nums2[i]) {if (hashMap.containsKey(nums2[temp.peek()])){Integer index = hashMap.get(nums2[temp.peek()]);res[index] = nums2[i];}temp.pop();}temp.add(i);}}return res;}
}
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"代码随想录打卡第六十天|● 739. 每日温度 ● 496.下一个更大元素 I":http://eshow365.cn/6-31658-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!