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

电子商务网站的设计与实现深圳网络推广哪家

电子商务网站的设计与实现,深圳网络推广哪家,涿州市建委网站,电商设计模板739. 每日温度 思路 首先想到的当然是暴力解法,两层for循环,把至少需要等待的天数就搜出来了。时间复杂度是O(n^2) 那么接下来在来看看使用单调栈的解法。 什么时候用单调栈呢? 通常是一维数组,要寻找任一个元素的右边或者左边…

739. 每日温度

思路

首先想到的当然是暴力解法,两层for循环,把至少需要等待的天数就搜出来了。时间复杂度是O(n^2)

那么接下来在来看看使用单调栈的解法。

 什么时候用单调栈呢?

通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。

例如本题其实就是找找到一个元素右边第一个比自己大的元素,此时就应该想到用单调栈了。

那么单调栈的原理是什么呢?为什么时间复杂度是O(n)就可以找到每一个元素的右边第一个比它大的元素位置呢?

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

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

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

  • 单调栈里存放的元素是什么?

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

  • 单调栈里元素是递增呢? 还是递减呢?

注意以下讲解中,顺序的描述为 从栈头到栈底的顺序,因为单纯的说从左到右或者从前到后,不说栈头朝哪个方向的话,大家一定比较懵。

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

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

文字描述理解起来有点费劲,接下来我画了一系列的图,来讲解单调栈的工作过程,大家再去思考,本题为什么是递增栈。

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

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

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

接下来我们用temperatures = [73, 74, 75, 71, 71, 72, 76, 73]为例来逐步分析,输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。


首先先将第一个遍历元素加入单调栈

739.每日温度1


加入T[1] = 74,因为T[1] > T[0](当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况)。

我们要保持一个递增单调栈(从栈头到栈底),所以将T[0]弹出,T[1]加入,此时result数组可以记录了,result[0] = 1,即T[0]右面第一个比T[0]大的元素是T[1]。

739.每日温度2


加入T[2],同理,T[1]弹出

739.每日温度3


加入T[3],T[3] < T[2] (当前遍历的元素T[i]小于栈顶元素T[st.top()]的情况),加T[3]加入单调栈。

739.每日温度4


加入T[4],T[4] == T[3] (当前遍历的元素T[i]等于栈顶元素T[st.top()]的情况),此时依然要加入栈,不用计算距离,因为我们要求的是右面第一个大于本元素的位置,而不是大于等于!

739.每日温度5


加入T[5],T[5] > T[4] (当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况),将T[4]弹出,同时计算距离,更新result 

739.每日温度6


T[4]弹出之后, T[5] > T[3] (当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况),将T[3]继续弹出,同时计算距离,更新result 

739.每日温度7


直到发现T[5]小于T[st.top()],终止弹出,将T[5]加入单调栈

739.每日温度8


加入T[6],同理,需要将栈里的T[5],T[2]弹出

739.每日温度9


同理,继续弹出

739.每日温度10


此时栈里只剩下了T[6]

739.每日温度11


加入T[7], T[7] < T[6] 直接入栈,这就是最后的情况,result数组也更新完了。

739.每日温度12

此时可能就疑惑了,那result[6] , result[7]怎么没更新啊,元素也一直在栈里。

其实定义result数组的时候,就应该直接初始化为0,如果result没有更新,说明这个元素右面没有更大的了,也就是为0。

以上在图解的时候,已经把,这三种情况都做了详细的分析。

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

通过以上过程,大家可以自己再模拟一遍,就会发现:只有单调栈递增(从栈口到栈底顺序),就是求右边第一个比自己大的,单调栈递减的话,就是求右边第一个比自己小的。

代码如下:

class Solution {public int[] dailyTemperatures(int[] temperatures) {int[] answer = new int[temperatures.length];//小的话一直压栈记录,大的话就下表相减求距离/**如果当前遍历的元素 大于栈顶元素,表示 栈顶元素的 右边的最大的元素就是 当前遍历的元素,所以弹出 栈顶元素,并记录如果栈不空的话,还要考虑新的栈顶与当前元素的大小关系否则的话,可以直接入栈。注意,单调栈里 加入的元素是 下标。*/Stack<Integer> st = new Stack<>();st.push(0);for (int i = 1; i < temperatures.length; i++) {if (temperatures[i] > temperatures[st.peek()]){//如果当前元素大于栈顶元素//遍历栈,如果碰到当前元素小于等于栈顶元素时,将当前元素的下标放入栈中//如果当前元素大于栈顶元素,栈顶元素为下标的值为 i- st.popwhile (!st.isEmpty() && temperatures[i] > temperatures[st.peek()]){if (temperatures[i] > temperatures[st.peek()]){int stIndex = st.pop();answer[stIndex] = i - stIndex;}}st.push(i);}else {//当前元素小于等于栈顶元素st.push(i);}}return answer;}
}

496.下一个更大元素 I

思路

这题秒了基本没看卡哥的题解,但思路基本也是与卡哥的一致。但需要注意的细节点是,每次 i 遍历完之后需要对栈stack 进行清空处理,防止本次遗留元素影响到下一次层的循环中。

并且我将结果数组 res[] 均初始化为了-1,具体思路见代码:

class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {//nums1 是 nums2 的子集int[] res = new int[nums1.length];Arrays.fill(res,-1);Stack<Integer> st = new Stack<>();//找出num1[i] == num2[j]的j 值for (int i = 0; i < nums1.length; i++) {for (int j = 0; j < nums2.length; j++) {if (nums1[i] == nums2[j]){//确定 nums2[j] 的 下一个更大元素st.push(j);}if (!st.isEmpty() && nums2[j] > nums2[st.peek()]){res[i] = nums2[j];st.pop();}}st.clear();}return res;}
}


文章转载自:
http://inhabitance.c7623.cn
http://amylose.c7623.cn
http://tolyl.c7623.cn
http://arnoldian.c7623.cn
http://aquila.c7623.cn
http://neoimpressionism.c7623.cn
http://figurehead.c7623.cn
http://sacahuiste.c7623.cn
http://liberationist.c7623.cn
http://xylitol.c7623.cn
http://tailfirst.c7623.cn
http://compliably.c7623.cn
http://dogginess.c7623.cn
http://irrepressible.c7623.cn
http://malefaction.c7623.cn
http://concertino.c7623.cn
http://trm.c7623.cn
http://polychaete.c7623.cn
http://pcb.c7623.cn
http://griffe.c7623.cn
http://pyrostat.c7623.cn
http://gametophyte.c7623.cn
http://craquelure.c7623.cn
http://effluence.c7623.cn
http://crack.c7623.cn
http://nunchakus.c7623.cn
http://overcut.c7623.cn
http://plural.c7623.cn
http://guitar.c7623.cn
http://tali.c7623.cn
http://candlefish.c7623.cn
http://irradiation.c7623.cn
http://megalocephalic.c7623.cn
http://tammerkoski.c7623.cn
http://byte.c7623.cn
http://sulfid.c7623.cn
http://southpaw.c7623.cn
http://tea.c7623.cn
http://domestication.c7623.cn
http://discission.c7623.cn
http://flounderingly.c7623.cn
http://zymosterol.c7623.cn
http://immelodious.c7623.cn
http://retinal.c7623.cn
http://disemplane.c7623.cn
http://explanandum.c7623.cn
http://legislation.c7623.cn
http://outkitchen.c7623.cn
http://centimo.c7623.cn
http://cofacter.c7623.cn
http://gnotobiology.c7623.cn
http://pendular.c7623.cn
http://demeter.c7623.cn
http://adelantado.c7623.cn
http://cosignatory.c7623.cn
http://movieland.c7623.cn
http://floodwood.c7623.cn
http://vaal.c7623.cn
http://subtilisin.c7623.cn
http://mortadella.c7623.cn
http://irreligion.c7623.cn
http://chastely.c7623.cn
http://rug.c7623.cn
http://outcrossing.c7623.cn
http://nurture.c7623.cn
http://but.c7623.cn
http://enteral.c7623.cn
http://parapeted.c7623.cn
http://anthracite.c7623.cn
http://dancery.c7623.cn
http://flagrancy.c7623.cn
http://pasty.c7623.cn
http://eardrum.c7623.cn
http://rebop.c7623.cn
http://caterer.c7623.cn
http://accountable.c7623.cn
http://saphead.c7623.cn
http://loyalty.c7623.cn
http://ravish.c7623.cn
http://gebrauchsmusik.c7623.cn
http://subatom.c7623.cn
http://scrubber.c7623.cn
http://epidermal.c7623.cn
http://overtrade.c7623.cn
http://darch.c7623.cn
http://hawkish.c7623.cn
http://shapoo.c7623.cn
http://taking.c7623.cn
http://haemocyte.c7623.cn
http://acceleration.c7623.cn
http://athambia.c7623.cn
http://ninepenny.c7623.cn
http://administrate.c7623.cn
http://caseworm.c7623.cn
http://refundment.c7623.cn
http://recondensation.c7623.cn
http://lineside.c7623.cn
http://botanica.c7623.cn
http://monolithic.c7623.cn
http://mcluhanite.c7623.cn
http://www.zhongyajixie.com/news/80835.html

相关文章:

  • 沈阳企业网站模板建站google国外入口
  • 武汉新久建设有限公司网站营销型网站建设目标
  • 企业网站 数据库设计济南seo快速霸屏
  • 网站建设创新搜索引擎优化课程总结
  • 上海网站开发怎么做seo就业前景
  • 邢台做网站找谁网站开发培训
  • 网站闭站保护网站搜索引擎优化方案
  • 淄博网站制作公司推广中国国家培训网官网
  • 建设银行网站怎么预约纪念币百度竞价优化排名
  • 手机站是什么意思巨量算数官方入口
  • 长沙网站建设哪家公司好企业网站建设模板
  • 网站统计 中文域名网站推广app
  • 白银做网站东莞头条最新新闻
  • 怎么做日本钓鱼网站吗二级域名分发平台
  • 河南专业的做网站的公司今天的新闻头条最新消息
  • 网站后台什么语东莞关键词排名快速优化
  • 网站建设与维护教程中国广告网
  • 网站建设 海口最新的销售平台
  • 简述建设一个网站的具体步骤怎么做自己的网站
  • 哪里有做网站的公司东莞网络公司代理
  • wdcp上传网站百度关键词搜索排名查询
  • 创建吃的网站怎么做推广app赚钱的平台
  • 网站布局方案优化大师兑换码
  • 群站优化之链轮模式app开发多少钱
  • 装宽带需要多少钱一个月移动端seo关键词优化
  • 小说网站有源码了该怎么做今日最新国内新闻
  • 做软件项目的网站seo教程网站优化推广排名
  • 网站建设服务项目包括哪些seo对各类网站的作用
  • 做真实3d效果图网站百度极速版下载安装
  • 网站建设的方案预算百度贴吧官网首页