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

常州做金属网格公司百度seo优化哪家好

常州做金属网格公司,百度seo优化哪家好,网站seo化自己可以吗,?a品定制网站开发​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 每日温度下一个更大元素 I总…

在这里插入图片描述

​📝个人主页:@Sherry的成长之路
🏠学习社区:Sherry的成长之路(个人社区)
📖专栏链接:练题
🎯长路漫漫浩浩,万事皆有期待

文章目录

  • 每日温度
  • 下一个更大元素 I
  • 总结:

每日温度

739. 每日温度 - 力扣(LeetCode)

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

单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。

更直白来说,就是用一个栈来记录我们遍历过的元素,因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。

在使用单调栈的时候首先要明确如下几点:

单调栈里存放的元素是什么?
单调栈里只需要存放元素的下标i就可以了,如果需要使用对应的元素,直接T[i]就可以获取。

单调栈里元素是递增呢? 还是递减呢?
这里我们要使用递增循序(再强调一下是指从栈头到栈底的顺序),因为只有递增的时候,栈里要加入一个元素i的时候,才知道栈顶元素在数组中右面第一个比栈顶元素大的元素是i。

即:如果求一个元素右边第一个更大元素,单调栈就是递增的,如果求一个元素右边第一个更小元素,单调栈就是递减的。

使用单调栈主要有三个判断条件。

当前遍历的元素T[i]小于栈顶元素T[st.top()]的情况
当前遍历的元素T[i]等于栈顶元素T[st.top()]的情况
当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况

把这三种情况分析清楚了,也就理解透彻了。

class Solution {public int[] dailyTemperatures(int[] temperatures) {int[] result = new int[temperatures.length];Arrays.fill(result, 0);Stack<Integer> st = new Stack<>();st.push(0);for (int i = 1; i < temperatures.length; i++) {if (temperatures[i] <= temperatures[st.peek()]) {st.push(i);} else {while (!st.isEmpty()&&temperatures[i] > temperatures[st.peek()]) {result[st.peek()] = i - st.pop();}st.push(i);}}return result;}
}

下一个更大元素 I

496. 下一个更大元素 I - 力扣(LeetCode)

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

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

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

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

这么定义这个result数组初始化应该为多少呢?

题目说如果不存在对应位置就输出 -1 ,所以result数组如果某位置没有被赋值,那么就应该是是-1,所以就初始化为-1。

在遍历nums2的过程中,我们要判断nums2[i]是否在nums1中出现过,因为最后是要根据nums1元素的下标来更新result数组。

注意题目中说是两个没有重复元素 的数组 nums1 和 nums2。

没有重复元素,我们就可以用map来做映射了。根据数值快速找到下标,还可以判断nums2[i]是否在nums1中出现过。

栈头到栈底的顺序,要从小到大,也就是保持栈里的元素为递增顺序。只要保持递增,才能找到右边第一个比自己大的元素。

可能这里有一些同学不理解,那么可以自己尝试一下用递减栈,能不能求出来。其实递减栈就是求右边第一个比自己小的元素了。

接下来就要分析如下三种情况,一定要分析清楚。

情况一:当前遍历的元素T[i]小于栈顶元素T[st.top()]的情况
此时满足递增栈(栈头到栈底的顺序),所以直接入栈。

情况二:当前遍历的元素T[i]等于栈顶元素T[st.top()]的情况
如果相等的话,依然直接入栈,因为我们要求的是右边第一个比自己大的元素,而不是大于等于!

情况三:当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况
此时如果入栈就不满足递增栈了,这也是找到右边第一个比自己大的元素的时候。

判断栈顶元素是否在nums1里出现过,(注意栈里的元素是nums2的元素),如果出现过,开始记录结果。

class Solution {public static int[] nextGreaterElement(int[] nums1, int[] nums2) {Stack<Integer> st= new Stack<>();HashMap<Integer, Integer> map= new HashMap<>();int[] result= new int[nums1.length];for (int i = 0; i < nums2.length; i++) {map.put(nums2[i], -1);}st.push(0);for (int i = 1; i < nums2.length; i++) {while (!st.isEmpty()&&nums2[i]>nums2[st.peek()]){map.put(nums2[st.pop()],nums2[i]);}st.push(i);}for (int i = 0; i <nums1.length; i++) {result[i]= map.get(nums1[i]);}return result;}
}

总结:

今天我们完成了每日温度、下一个更大元素 I两道题,相关的思想需要多复习回顾。接下来,我们继续进行算法练习。希望我的文章和讲解能对大家的学习提供一些帮助。

当然,本文仍有许多不足之处,欢迎各位小伙伴们随时私信交流、批评指正!我们下期见~

在这里插入图片描述

http://www.hengruixuexiao.com/news/47979.html

相关文章:

  • wordpress 显示摘要福州seo优化
  • 网站建设公司发展做灰色词seo靠谱
  • 国外做兼职网站有哪些淘宝关键词排名怎么查
  • 公司官网如何更新网站深圳百度推广关键词推广
  • discuz做的网站百度数据中心
  • 国家高新技术企业牌匾seo搜索引擎优化是做什么的
  • 手机网站开发视频百度seo详解
  • wordpress 全屏seo教程网站优化
  • 销售网站怎么做的2345浏览器网页版
  • 做网站策划书文档seo基础教程
  • 时时彩黑彩网站开发web设计一个简单网页
  • 洛阳建设企业网站公司谷歌下载官方正版
  • 深圳网站建设方案外包地推公司
  • 怎么用ps做网站ui如何制作网站二维码
  • 设计平台网站seo研究所
  • 网站对于企业的意义上海网站关键词排名优化报价
  • 网站建设及seo营销培训内容有哪些
  • 网站建设培训pptseo收录排名
  • 客户网站建设需要什么资料莆田百度seo公司
  • 连锁酒店网站建设天津百度快速排名优化
  • 长沙公众号开发免费的关键词优化软件
  • html5 珠宝网站网站搭建详细教程
  • 怎样做企业学校网站北京seo公司
  • 安宁网站建设熊掌官网seo哪家公司好
  • 网站首页菜单栏表怎么做百度客户服务中心
  • 手机网站优化排名首码项目推广平台
  • 苏州制作企业网站公司公司做网站一般多少钱
  • 重庆网站建设制作设计公司站内优化seo
  • 温州自助模板建站上海网络推广公司排名
  • 番禺网站建设a2345提高工作效率的重要性