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

做app网站有哪些功能wordpress網頁版

做app网站有哪些功能,wordpress網頁版,商业网站建设咨询,网站的功能需求分析Java 单调栈:从入门到实战 文章目录 Java 单调栈:从入门到实战引言什么是单调栈?单调递增栈单调递减栈 单调栈的应用场景Java 实现单调栈代码示例:下一个更大元素代码解析 单调栈的优势实战应用:股票价格跨度代码示例代…

Java 单调栈:从入门到实战

文章目录

  • Java 单调栈:从入门到实战
    • 引言
    • 什么是单调栈?
      • 单调递增栈
      • 单调递减栈
    • 单调栈的应用场景
    • Java 实现单调栈
      • 代码示例:下一个更大元素
        • 代码解析
    • 单调栈的优势
    • 实战应用:股票价格跨度
      • 代码示例
        • 代码解析
    • 总结
      • 参考资料

引言

在 Java 编程中,数据结构的选择和使用往往是解决复杂问题的关键。单调栈(Monotonic Stack)作为一种高效的数据结构,能够在 O(n) 时间复杂度内解决许多与单调性相关的问题,例如“下一个更大元素”、“股票价格跨度”等。对于 CSDN 的读者来说,深入理解单调栈不仅能提升代码能力,还能在面试和项目中脱颖而出。本文将带你从单调栈的基本概念入手,逐步深入到 Java 实现与实战应用,附上详细代码示例,让你轻松掌握这一利器!


什么是单调栈?

单调栈是一种特殊的栈结构,其核心在于保持栈内元素的单调性,即从栈底到栈顶元素要么单调递增,要么单调递减。在操作时,单调栈会通过弹出不符合单调性的元素来维持这一特性,从而在处理实时单调性问题时表现出色。

单调递增栈

  • 定义:栈内元素从栈底到栈顶单调递增。
  • 入栈规则:当新元素入栈时,如果栈顶元素大于或等于新元素,则不断弹出栈顶元素,直到栈顶小于新元素或栈为空。

单调递减栈

  • 定义:栈内元素从栈底到栈顶单调递减。
  • 入栈规则:当新元素入栈时,如果栈顶元素小于或等于新元素,则不断弹出栈顶元素,直到栈顶大于新元素或栈为空。

单调栈的这种动态调整机制,使其在特定场景下非常高效。


单调栈的应用场景

单调栈在算法和实际项目中有广泛应用,以下是几个经典场景:

  1. 下一个更大元素(Next Greater Element):在数组中为每个元素找到右边第一个比它大的元素。
  2. 股票价格跨度(Stock Span Problem):计算连续天数中股票价格不高于当天的最大天数。
  3. 直方图中最大矩形(Largest Rectangle in Histogram):在直方图中找到面积最大的矩形。
  4. 温度预测:在温度数组中找到每个温度下一次更高温度出现的日子。

这些问题有一个共同点:需要快速找到某种单调关系,而单调栈正是解决这类问题的“杀手锏”。


Java 实现单调栈

在 Java 中,我们可以利用 java.util.Stack 类来实现单调栈。下面以“下一个更大元素”问题为例,展示单调递减栈的实现。

代码示例:下一个更大元素

import java.util.Stack;public class MonotonicStackExample {public static int[] nextGreaterElement(int[] nums) {int n = nums.length;int[] result = new int[n];Stack<Integer> stack = new Stack<>(); // 单调递减栈// 从右向左遍历数组for (int i = n - 1; i >= 0; i--) {// 弹出所有小于当前元素的栈内元素while (!stack.isEmpty() && stack.peek() <= nums[i]) {stack.pop();}// 如果栈不为空,栈顶即为下一个更大元素,否则为 -1result[i] = stack.isEmpty() ? -1 : stack.peek();// 当前元素入栈stack.push(nums[i]);}return result;}public static void main(String[] args) {int[] nums = {2, 1, 2, 4, 3};int[] result = nextGreaterElement(nums);for (int num : result) {System.out.print(num + " "); // 输出: 4 2 4 -1 -1}}
}
代码解析
  • 栈的单调性:栈内元素保持单调递减。
  • 遍历方向:从右向左遍历,便于找到右侧的更大元素。
  • 逻辑
    1. 对于当前元素 nums[i],弹出栈内所有小于等于它的元素。
    2. 若栈为空,则右侧无更大元素,记为 -1;否则栈顶即为答案。
    3. 将当前元素压入栈,继续处理下一个元素。

单调栈的优势

  1. 时间复杂度:每个元素最多入栈和出栈一次,总时间复杂度为 O(n)。
  2. 空间复杂度:最坏情况下栈存储所有元素,空间复杂度为 O(n)。
  3. 实时性:单调栈适合动态数据流场景,能实时维护单调性。

实战应用:股票价格跨度

问题描述:给定一个股票价格数组,计算每一天股票价格不高于当天的连续天数(包括当天)。

解法:使用单调递增栈,栈内存储价格及其对应的跨度,动态累加跨度。

代码示例

import java.util.Stack;public class StockSpan {public static int[] stockSpan(int[] prices) {int n = prices.length;int[] spans = new int[n];Stack<int[]> stack = new Stack<>(); // 存储 [价格, 跨度]for (int i = 0; i < n; i++) {int span = 1;// 弹出栈内小于等于当前价格的元素,累加其跨度while (!stack.isEmpty() && stack.peek()[0] <= prices[i]) {span += stack.pop()[1];}spans[i] = span;stack.push(new int[]{prices[i], span});}return spans;}public static void main(String[] args) {int[] prices = {100, 80, 60, 70, 60, 75, 85};int[] spans = stockSpan(prices);for (int span : spans) {System.out.print(span + " "); // 输出: 1 1 1 2 1 4 6}}
}
代码解析
  • 栈的单调性:栈内价格单调递增。
  • 跨度计算:当遇到更高价格时,弹出栈内较小的价格并累加其跨度。
  • 结果spans[i] 表示第 i 天对应的跨度。

总结

单调栈凭借其高效性和简洁性,成为解决单调性问题的利器。本文从概念到代码,详细介绍了 Java 中单调栈的实现与应用,涵盖了“下一个更大元素”和“股票价格跨度”两个经典案例。无论你是准备算法面试,还是在项目中优化代码,单调栈都值得你深入掌握。

希望这篇博客能为你带来启发!如果有疑问或想了解更多应用场景,欢迎在评论区留言交流。

参考资料

  • LeetCode: Next Greater Element
  • GeeksforGeeks: Stock Span Problem

希望这篇博客能帮你在面试或项目中游刃有余!有疑问欢迎留言讨论,喜欢请点赞关注哦!


文章转载自:

http://45j3N1RE.gkmwk.cn
http://9D02w5k9.gkmwk.cn
http://JIu4YGwB.gkmwk.cn
http://kQI2rYv9.gkmwk.cn
http://8Rw8zPh3.gkmwk.cn
http://9eA5D0Du.gkmwk.cn
http://F5GBd8SU.gkmwk.cn
http://3cQvp8TI.gkmwk.cn
http://DhqpXplA.gkmwk.cn
http://Xr5GP9JH.gkmwk.cn
http://41yeRrdO.gkmwk.cn
http://TLq8xOeE.gkmwk.cn
http://BL4XXOHp.gkmwk.cn
http://EtIMipNq.gkmwk.cn
http://nm8kkhqF.gkmwk.cn
http://P6VJBaYW.gkmwk.cn
http://VjWwKtgh.gkmwk.cn
http://D1crrMpM.gkmwk.cn
http://8ivXH3Ef.gkmwk.cn
http://fHjP7UdI.gkmwk.cn
http://GcjWVUvK.gkmwk.cn
http://Lv1Zcrro.gkmwk.cn
http://xF00REfK.gkmwk.cn
http://RKWWSkiY.gkmwk.cn
http://iAGB1CFG.gkmwk.cn
http://kQpKKB7N.gkmwk.cn
http://kLbCdAVO.gkmwk.cn
http://UvIkIoGh.gkmwk.cn
http://XfdEQiCk.gkmwk.cn
http://SDCCnsZ5.gkmwk.cn
http://www.dtcms.com/wzjs/779775.html

相关文章:

  • 重庆网站建设选圣矢关于进一步加强网站建设和
  • 做直播网站需要学什么软件有哪些为什么网站需要备案
  • 上海网站优化海移动深圳网站
  • 南城网站建设公司建设企业网站的人员组成
  • 网站建设与电子商务的教案南通网站推广优化费用
  • 工作站做网站企业网站报价方案下载
  • 营销型网站功能表检察院前期网站建设
  • 湘潭做网站推荐磐石网络注册安全工程师报考条件及科目
  • 中文响应式网站和wordpress价值
  • 营口房产建设信息网站网页设计实训内容及过程
  • 学校诗歌网站建设冷水滩做微网站
  • 网站优化北京哪家强?上海建工一建集团有限公司
  • 自己做网站卖货多少钱网站上做旅游卖家要学什么条件
  • 淄博专业网站建设公司虚拟网站源码
  • 西安做网站朋朋计算机网络技术毕业设计
  • 智能网站推广优化上海珍岛做网站怎么样
  • 想做水果外卖怎么做网站公司商标注册怎么弄
  • 上海网站备案中心网站建设业务培训
  • 京东联盟推广网站博客网站怎么建设
  • 品牌建设网站公司网站栏目方案
  • 做电脑网站手机能显示不出来怎么办工信部信息备案网站首页
  • 房子网站有哪些wordpress邮件有%3c%3e
  • 手机端网站建设郑州网站代码开发定制
  • 临沂网站建设做网站网络营销方法有哪几种
  • 谷歌seo网站运营定制高端网站
  • 宿豫建设局网站中小企业网站建设服务公司
  • 网站的建设费 账务处理安踏网站建设策划方案
  • 电子商务网站建设与实验微信网站登录
  • 上海网站专业制作wordpress文章摘要显示
  • 杭州h5模板建站百度上推广一个网站该怎么做