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

代码随想录算法训练营第四十一天

LeetCode题目:

  • 739. 每日温度
  • 496. 下一个更大元素 I
  • 503. 下一个更大元素 II

其他:

今日总结
往期打卡


739. 每日温度

跳转: 739. 每日温度

学习: 代码随想录公开讲解

问题:

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

思路:

单调栈,遇到递增弹出,并记录弹出元素与当前元素的索引差

复杂度:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

代码:

class Solution {public int[] dailyTemperatures(int[] temperatures) {int length = temperatures.length;int[] ans = new int[length];Deque<Integer> stack = new LinkedList<>();for(int i = 0 ; i< length ;i++){while(!stack.isEmpty() && temperatures[stack.peek()] < temperatures[i]){int push = stack.pop();ans[push] = i- push;}stack.push(i);}return ans;}
}

496. 下一个更大元素 I

跳转: 496. 下一个更大元素 I

学习: 代码随想录公开讲解

问题:

nums1 中数字 x下一个更大元素 是指 xnums2 中对应位置 右侧第一个x 大的元素。

给你两个 没有重复元素 的数组 nums1nums2 ,下标从 0 开始计数,其中nums1nums2 的子集。

对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j]下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1

返回一个长度为 nums1.length 的数组 ans 作为答案,满足 ans[i] 是如上所述的 下一个更大元素

思路:

一个数组元素在另一个数组中是否之后有更大元素,做一下映射即可.

复杂度:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

代码:

class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {int n = nums1.length;int[] ans = new int[n];Arrays.fill(ans,-1);Map<Integer,Integer> map = new HashMap<>();for(int i=0;i<n;i++){map.put(nums1[i],i);}Deque<Integer> stack = new LinkedList<>();for(int i:nums2){while(!stack.isEmpty() && stack.peek() < i){int push = stack.pop();if(map.containsKey(push)){ans[map.get(push)] = i;}}stack.push(i);}return ans;}
}

503. 下一个更大元素 II

跳转: 503. 下一个更大元素 II

学习: 代码随想录公开讲解

问题:

给定一个循环数组 numsnums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素

数字 x下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1

思路:

遍历两遍即可,可以扩充数组,取余,或单纯复制一遍循环.

复杂度:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

代码:

class Solution {public int[] nextGreaterElements(int[] nums) {int length = nums.length;int[] ans = new int[length];Arrays.fill(ans,-1);Deque<Integer> stack = new LinkedList<>();for(int i = 0 ; i< length ;i++){while(!stack.isEmpty() && nums[stack.peek()] < nums[i]){int push = stack.pop();ans[push] = nums[i];}stack.push(i);}for(int i = 0 ; i< length ;i++){while(!stack.isEmpty() && nums[stack.peek()] < nums[i]){int push = stack.pop();ans[push] = nums[i];}stack.push(i);}return ans;}
}

总结

练习了单调栈的应用

往期打卡

代码随想录算法训练营第四十天

代码随想录算法训练营第三十九天

代码随想录算法训练营第三十八天

代码随想录算法训练营第三十七天

代码随想录算法训练营第三十五&三十六天

代码随想录算法训练营第三十四天

代码随想录算法训练营第三十三天(补)

代码随想录算法训练营第三十二天

代码随想录算法训练营第三十一天

代码随想录算法训练营第三十天(补)

代码随想录算法训练营第二十九天

代码随想录算法训练营第二十八天

代码随想录算法训练营第二十七天(补)

代码随想录算法训练营第二十六天

代码随想录算法训练营第二十五天

代码随想录算法训练营第二十四天

代码随想录算法训练营第二十三天

代码随想录算法训练营周末四

代码随想录算法训练营第二十二天(补)

代码随想录算法训练营第二十一天

代码随想录算法训练营第二十天

代码随想录算法训练营第十九天

代码随想录算法训练营第十八天

代码随想录算法训练营第十七天

代码随想录算法训练营周末三

代码随想录算法训练营第十六天

代码随想录算法训练营第十五天

代码随想录算法训练营第十四天

代码随想录算法训练营第十三天

代码随想录算法训练营第十二天

代码随想录算法训练营第十一天

代码随想录算法训练营周末二

代码随想录算法训练营第十天

代码随想录算法训练营第九天

代码随想录算法训练营第八天

代码随想录算法训练营第七天

代码随想录算法训练营第六天

代码随想录算法训练营第五天

代码随想录算法训练营周末一

代码随想录算法训练营第四天

代码随想录算法训练营第三天

代码随想录算法训练营第二天

代码随想录算法训练营第一天

http://www.xdnf.cn/news/6454.html

相关文章:

  • 【Pandas】pandas DataFrame eval
  • STM32 DMA技术深度解析:从原理到实战应用讲解
  • 激光雷达视觉定位是3D视觉定位吗?
  • GCC 使用说明
  • 专项智能练习(定义判断)_DA_01
  • 案例:塔能精准能耗节能技术,驱动工厂智能变革
  • 异步日志系统01——日志系统框架
  • 扬州卓韵酒店用品:优质洗浴用品,提升酒店满意度与品牌形象
  • 应用BERT-GCN跨模态情绪分析:贸易缓和与金价波动的AI归因
  • OpenCV CUDA模块中矩阵操作------范数(Norm)相关函数
  • 面试题:介绍一下JAVA中的反射机制
  • Springboot考研信息平台
  • 25.第二阶段x64游戏实战-分析物品相关数据
  • CSS 布局系统深度解析:从传统到现代的布局方案
  • 深入浅出:Windows系统DLL劫持提权原理
  • Java Socket编程完全指南:从基础到实战应用
  • SSTI 刷刷刷个题
  • 使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据(申请key教程)
  • 电总协议调试助手更新-PowerBus-v1.0.5
  • 实验5 DNS协议分析与测量
  • 油漆面积--二维差分求区间变化
  • 测序的原理
  • java-JUC概述(进行分类总结-包含原子类、并发集合、线程等)
  • 生成式AI在编程中的应用场景:从代码生成到安全检测
  • 【数据结构】链表 LinkedList
  • Rust 学习笔记:关于 Vector 的练习题
  • 微信小程序全解析:从入门到实战
  • 乡村农家游乐小程序源码介绍
  • 使用 SAMLoRA 提取非正规建筑区
  • 精益数据分析(60/126):移情阶段的终极追问——如何用结构化访谈挖掘真实需求