当前位置: 首页 > news >正文

LeetCode-496-下一个更大元素

题目描述:

image.png

题目链接:LeetCode-496-下一个更大元素

解题思路:
方法一:暴力
方法二:单调栈

方法一代码实现:

class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {// 最笨的方法:暴力int len1= nums1.length;int len2= nums2.length;int[] res=new int[len1];Arrays.fill(res,-1);for (int i = 0; i < len1; i++) {for (int j = 0; j < len2; j++) {if (nums1[i]==nums2[j]){for (int k = j; k <len2 ; k++) {if (nums2[k]>nums2[j]){res[i]=nums2[k];break;// 找到之后一定要 break,不然会一直往后找,每次都是最后一个}}}}}return res;}

方法二代码实现:

  1. 先将nums1中的元素和下标都映射到map中,方便遍历nums2的时候查找
  2. 开始遍历nums2,存放的是下标,初始时将0放到stack中,开始判断栈口元素和当前元素的大小
    • 若 栈口元素 < 当前元素的大小,再判断栈是否为空,并且map中是否包含栈顶元素下标对应的索引,都有的话再更新res数组;
    • 若 栈口元素 = 当前元素的大小,直接入栈
    • 若 栈口元素 > 当前元素的大小,直接入栈
class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {int len1 = nums1.length;int len2= nums2.length;int[] res = new int[len1];// 初始化为-1Arrays.fill(res, -1);// 新学的方式,直接使用工具类,底层原理和自己写的效果是一样的Map<Integer, Integer> map = new HashMap<>();// 将nums1放到map中,目的是根据元素的数值可以找到其对应的下标for (int i = 0; i < len1; i++) {map.put(nums1[i], i);// <4,0>  <1,1>  <2,2>}Stack<Integer> stack = new Stack<>();// 单调栈遍历的是nums2stack.push(0);// 把nums2下标存进去for (int i = 1; i < nums2.length; i++) {// 如果 栈口元素 < 当前遍历元素: 收获结果,栈口元素出栈,再比较当前 栈口元素和 当前遍历元素的结果// 如果 栈口元素 = 当前遍历元素: 直接入栈// 如果 栈口元素 > 当前遍历元素: 直接入栈if (nums2[i] <= nums2[stack.peek()]) {// 保证是单调递增的栈stack.push(i);} else {// 持续判断的过程:先判断是否在map中while (!stack.isEmpty() && nums2[stack.peek()] < nums2[i]) {if (map.containsKey(nums2[stack.peek()])) {Integer index = map.get(nums2[stack.peek()]);res[index] = nums2[i];}stack.pop();// 弹出栈顶元素}stack.add(i);// 都不满足就入栈}}return res;}
}
http://www.lryc.cn/news/188136.html

相关文章:

  • C++中的Lambda表达式
  • dockerfile搭建lnmp
  • python之数据库操作详解
  • 完成flex布局与float布局
  • ThinkPHP团购拼购商城源码/带分销团购商城网站源码/完美版
  • awvs 中低危漏洞
  • openGauss学习笔记-95 openGauss 数据库管理-访问外部数据库-postgres_fdw
  • 并不止于表面理论和简单示例——《Python数据科学项目实战》
  • skywalking功能介绍
  • c++桥接模式,中介者模式应用实现状态跳转
  • 【SpringCloud】Ribbon负载均衡原理、负载均衡策略、饥饿加载
  • 亘古难题——前端开发or后端开发
  • Notepad++提取含有特定字符串的行
  • host配置
  • ```,```中间添加 # + 空格 + 空行后遇到的底部空行出错,书接上回,处理空行
  • Unity官方文档中关于内存管理的翻译(2021.3)
  • 点云处理开发测试题目 完整解决方案
  • TensorRT的结构
  • python对excel数据表进行数据清洗
  • 95、Spring Data Redis 之使用RedisTemplate 实现自定义查询 及 Spring Data Redis 的样本查询
  • jdbc(DriverManager+Connection+Statement+ResultSet)+SQL注入+开启预编译+数据连接池
  • NoSQL之 Redis命令工具及常用命令
  • 多线程(线程互斥)
  • 使用 html2canvas 和 jspdf 将页面转 pdf,同时解决当页面过长时,页面白屏问题
  • 【Python 千题 —— 基础篇】今年几岁啦
  • git push 失败 shallow update not allowed
  • uniapp 在uni.scss 根据@mixin定义方法 、通过@include全局使用
  • C++ 类和对象(一)
  • rust函数
  • 链表的基本操作