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.下个更大的数相关推荐

  1. LeetCode 496. 下一个更大元素 I

    599. 两个列表的最小索引总和 添加链接描述 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和 ...

  2. Java实现 LeetCode 496 下一个更大元素 I

    496. 下一个更大元素 I 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nu ...

  3. LeetCode 496. 下一个更大元素 I(哈希)

    1. 题目 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x ...

  4. LeetCode 496. 下一个更大元素 I 解题思路及C++实现

    解题思路: 因为这两个int型的vector中不包含重复元素,所以考虑使用c++中的unordered_map,对num2进行遍历,找到每一个元素的下一个更大元素,这样的话,时间复杂度就是O(n). ...

  5. leetcode 496. 下一个更大元素 I(Java版,单调栈解法)

    题目 https://leetcode-cn.com/problems/next-greater-element-i/ 题解 通过Stack.HashMap解决,经典的单调栈问题 先遍历大数组nums ...

  6. 将一个数组中的值按逆序重新排放。_六十五、下一个更大的数系列,单调栈解决方法...

    「@Author:Runsen」 ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. 「---- Runsen」 ❞ 据说,放张小姐姐觉得照片可以提高阅读量,图是来源学校 ...

  7. 496. 下一个更大元素 I

    496. 下一个更大元素 I 题目 分析 我的解答 官方解答 题目 给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 ...

  8. 力扣 496 下一个更大的元素I

    文章目录 题目 思路 AC代码 后记 题目 496. 下一个更大元素 I 思路 接到手,肯定是考虑直接暴力模拟的,时间复杂度是O(mn).题解给了一个更好的方法,利用单调栈来对nums2进行预处理.这 ...

  9. leetcode 503. 下一个更大元素 II(单调栈)

    给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它 ...

最新文章

  1. calipso是什么意思_眰恦是什么意思?
  2. AI靠语意理解把照片变抽象画,无需相应数据集,只画4笔也保留神韵,有毕加索内味儿了...
  3. shell按行读取文件的常见几种方法
  4. www.yzcode.com Flash广告下载,自己利用从此网站下载的Flash广告制作了自己第一个广告...
  5. js选择日期即时把两个日期相差天数显示出来?
  6. PHP培训选云和数据,送给云和数据郑州分中心PHP培训班全体学员的祝福
  7. 前端学习(2422):反馈
  8. 「批处理」以服务方式启动批处理
  9. 关于hibernate的一些小记
  10. GNU ARM汇编--(五)中断汇编之嵌套中断处理
  11. 【飞行器】基于matlab多源信息融合算法多旋翼无人机组合导航系统【含Matlab源码 1267期】
  12. android x5内核 下载地址,在Android项目中集成腾讯X5内核
  13. 信号处理 | 维纳滤波推导
  14. 音频HiFi的二三事
  15. itellyou操作系统,office等软件的很全的下载站
  16. 华硕笔记本很久没用开机后无法进入系统自动跳转bios界面的解决方法
  17. 《心流》| 精神熵和负熵
  18. 北大正式成立智能学院,AI视觉大牛朱松纯任院长
  19. 批量删除多个 Word 文档的空白页
  20. spring中自带的缓存springcache

热门文章

  1. T29389 中忍考试:宁次VS鸣人-白眼!
  2. php自测试卷2,PHP试卷2
  3. 谢文的离职代表着雅虎中国的没落?
  4. Algorithm Visualizer 类详解
  5. 阿尔·里斯-市场营销的22条法则(22条商规)-11
  6. 三点定位法(原理及实现)
  7. edas部署需要哪些参数_云效+EDAS部署遇到的项目问题
  8. K8S部署rook+ceph云原生存储
  9. HBase:(三)HBase API
  10. popper.js使用_使用Popper.js创建页面上的气泡