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. flexcan controller register
  2. matlab 蜂窝网格,blender怎么制作蜂巢网格 蜂窝式网格画法
  3. 网易云解码实时音视频社交 成就游戏产业发展新变量
  4. 一发工资就全部取出,会对银行流水有影响吗?
  5. 苍天饶过谁?| 今日最佳
  6. 一点一点学ASP.NET之基础概念——HttpHandler
  7. docker-compose.yml配置文件详解
  8. 2dpsk差分相干解调matlab,基于systemview和matlab的2DPSK
  9. 手机闪存速度排行_2020年双十二3000-4000元高性价比手机推荐!
  10. vba mysql 没有为命令对象设置命令_怎样解决“没有为命令对象设置命令”的错误? - .Net论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  11. Android AIDL远程服务demo
  12. C#二进制方式(binary、varbinary、blob、longblog等)读写mysql
  13. 记vsftpd虚拟用户登录返回530 Login incorrect解决过程
  14. Linux基本操作(实训一)
  15. 实体书回暖?码洋过10,000,000的随想
  16. 解密android日志xlog,mars的xlog日志文件解析以及日志查看工具介绍
  17. 高德地图实时定位显示图标和名字
  18. Java基础:IO 流中的 flush
  19. 基于分治和DP的算法设计
  20. 前端VUE面试题总结

热门文章

  1. deegree sqldialect mysql_Hibernate SQL方言 (hibernate.dialect) 汇总
  2. 计算机管理员被隐藏,怎么隐藏管理员账户?隐藏管理员账户的操作方法
  3. 大数据之Spark:Structured Streaming
  4. 技术进步停滞?中本聪是谁?大学教育还有用吗?Peter Thiel 有话要说 | ArcBlock 播客 ⑤...
  5. echarts绘制上海地图
  6. 高并发场景下的库存更新
  7. 车载部标服务器源码,部标JT T808-2013协议与样例代码
  8. 2021-08-02 Linux — 初始化服务器练习
  9. 图书管理员(librarian)
  10. ubuntu安装docker软件,使用deb 安装