LeetCode 496.下个更大的数
LeetCode 496. 下一个更大元素 I
给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。
示例:
输入: nums1 = [4,1,2], nums2 = [1,3,4,2].
输出: [-1,3,-1]
解释:对于 num1 中的数字 4 ,你无法在第二个数组中找到下一个更大的数字,因此输出 -1 。对于 num1 中的数字 1 ,第二个数组中数字1右边的下一个较大数字是 3 。对于 num1 中的数字 2 ,第二个数组中没有下一个更大的数字,因此输出 -1 。
解题:
方法一:暴力破解法,遍历两个数组,在第二个数组中找到第一个数组每个元素的位置,再遍历第二个数组剩下的元素作比较,有更大的值则赋值给第一个数组。
代码1:
class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {int b;int a;for(a = 0; a < nums1.length; a++){for(b = 0; b < nums2.length; b++){if(nums1[a] == nums2[b]){while(b < nums2.length){b++;try{if(nums1[a] < nums2[b]){nums1[a] = nums2[b];break;}}catch(Exception e){nums1[a] = -1;}}}}}return nums1;}
}
代码2(官方):
public class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {int len1 = nums1.length;int len2 = nums2.length;int[] res = new int[len1];if (len1 < 1) {return res;}for (int i = 0; i < len1; i++) {int curVal = nums1[i];int j = 0;while (j < len2 && nums2[j] != curVal) {j++;}// 此时 nums[j] = nums[i]j++;while (j < len2 && nums2[j] < curVal) {j++;}if (j == len2) {res[i] = -1;continue;}res[i] = nums2[j];}return res;}
}
方法二:单调栈,利用栈找出nums2数组中每个元素的对应的下一个更大的数存入哈希表,在遍历nums1数组,从哈希表找出对应的值。
代码:
public class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {int len1 = nums1.length;int len2 = nums2.length;Deque<Integer> stack = new ArrayDeque<>();Map<Integer, Integer> map = new HashMap<>();// 先处理 nums2,把对应关系存入哈希表for (int i = 0; i < len2; i++) {while (!stack.isEmpty() && stack.peekLast() < nums2[i]) {//stack.removeLast()移除并返回最后一个元素map.put(stack.removeLast(), nums2[i]);}stack.addLast(nums2[i]);}// 遍历 nums1 得到结果集int[] res = new int[len1];for (int i = 0; i < len1; i++) {//Map.getOrDefault(Object key, V defaultValue)方法的作用是://当Map集合中有这个key时,就使用这个key值;//如果没有就使用默认值defaultValue。res[i] = map.getOrDefault(nums1[i], -1);}return res;}
}
LeetCode 496.下个更大的数相关推荐
- LeetCode 496. 下一个更大元素 I
599. 两个列表的最小索引总和 添加链接描述 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和 ...
- Java实现 LeetCode 496 下一个更大元素 I
496. 下一个更大元素 I 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nu ...
- LeetCode 496. 下一个更大元素 I(哈希)
1. 题目 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x ...
- LeetCode 496. 下一个更大元素 I 解题思路及C++实现
解题思路: 因为这两个int型的vector中不包含重复元素,所以考虑使用c++中的unordered_map,对num2进行遍历,找到每一个元素的下一个更大元素,这样的话,时间复杂度就是O(n). ...
- leetcode 496. 下一个更大元素 I(Java版,单调栈解法)
题目 https://leetcode-cn.com/problems/next-greater-element-i/ 题解 通过Stack.HashMap解决,经典的单调栈问题 先遍历大数组nums ...
- 将一个数组中的值按逆序重新排放。_六十五、下一个更大的数系列,单调栈解决方法...
「@Author:Runsen」 ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. 「---- Runsen」 ❞ 据说,放张小姐姐觉得照片可以提高阅读量,图是来源学校 ...
- 496. 下一个更大元素 I
496. 下一个更大元素 I 题目 分析 我的解答 官方解答 题目 给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 ...
- 力扣 496 下一个更大的元素I
文章目录 题目 思路 AC代码 后记 题目 496. 下一个更大元素 I 思路 接到手,肯定是考虑直接暴力模拟的,时间复杂度是O(mn).题解给了一个更好的方法,利用单调栈来对nums2进行预处理.这 ...
- leetcode 503. 下一个更大元素 II(单调栈)
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它 ...
最新文章
- calipso是什么意思_眰恦是什么意思?
- AI靠语意理解把照片变抽象画,无需相应数据集,只画4笔也保留神韵,有毕加索内味儿了...
- shell按行读取文件的常见几种方法
- www.yzcode.com Flash广告下载,自己利用从此网站下载的Flash广告制作了自己第一个广告...
- js选择日期即时把两个日期相差天数显示出来?
- PHP培训选云和数据,送给云和数据郑州分中心PHP培训班全体学员的祝福
- 前端学习(2422):反馈
- 「批处理」以服务方式启动批处理
- 关于hibernate的一些小记
- GNU ARM汇编--(五)中断汇编之嵌套中断处理
- 【飞行器】基于matlab多源信息融合算法多旋翼无人机组合导航系统【含Matlab源码 1267期】
- android x5内核 下载地址,在Android项目中集成腾讯X5内核
- 信号处理 | 维纳滤波推导
- 音频HiFi的二三事
- itellyou操作系统,office等软件的很全的下载站
- 华硕笔记本很久没用开机后无法进入系统自动跳转bios界面的解决方法
- 《心流》| 精神熵和负熵
- 北大正式成立智能学院,AI视觉大牛朱松纯任院长
- 批量删除多个 Word 文档的空白页
- spring中自带的缓存springcache
热门文章
- T29389 中忍考试:宁次VS鸣人-白眼!
- php自测试卷2,PHP试卷2
- 谢文的离职代表着雅虎中国的没落?
- Algorithm Visualizer 类详解
- 阿尔·里斯-市场营销的22条法则(22条商规)-11
- 三点定位法(原理及实现)
- edas部署需要哪些参数_云效+EDAS部署遇到的项目问题
- K8S部署rook+ceph云原生存储
- HBase:(三)HBase API
- popper.js使用_使用Popper.js创建页面上的气泡