首页 > 编程知识 正文

趣味题,好玩又有趣的算法

时间:2023-05-04 07:37:54 阅读:34520 作者:2527

在打磨LeetCode时,每次遇到精彩的问题解决方案都会感叹数据结构的伟大,但巧妙的设计可以非常明确地解决问题。

单调堆栈分为单调增加堆栈和单调减少堆栈,是单调增加堆栈,即堆栈中的元素保持单调增加的堆栈。 同样,单调减少堆栈(即堆栈中的元素保持单调减少的堆栈)与单调队列相同,但只使用到其一端,利用它可以解决RQNOJ的“否”队列等ACM/ICPC和OI主题【来源于百度百科的定义】

作用可以在o(1)的时间复杂度中知道位置左侧和右侧比他大(或小)的数量的位置,而在需要高效地获取机灵大地位于位置左侧和右侧比他大(或小)的数量的位置时,作用可以用于单调堆栈。

解答问题

想法可以维持存储下标的单调堆栈,从堆栈底部开始依次减少与堆栈上下标对应的温度列表中的温度。 如果下标位于单调的堆栈中,则表示找不到下一个温度较高的下标。 正向遍历温度列表。

对于温度列表各元素T[i],

如果栈为空,则直接将i进栈,

http://www.Sina.com/http://www.Sina.com /

http://www.Sina.com/http://www.Sina.com /

重复上述操作,直到堆栈为空或堆栈顶部元素对应的温度低于当前温度,然后将I放入堆栈中。

如果栈不为空,则比较栈顶元素

因为在这种情况下,与进入堆栈的I相对应的T[i]始终是T[prevIndex]右边第一个大于它的元素。 请想想,如果prevIndex和I有更大的元素,而下标为j,则prevIndex一定会在下标j的圈上被弹出。

由于单调堆栈满足与堆栈底部到堆栈顶部的元素相对应的温度下降,因此每次堆栈元素时,会删除所有温度较低的元素,并更新与堆栈元素相对应的等待天数。 这样,等待天数一定最小。

prevIndex对应的温度T[prevIndex]和当前温度T[i],

对于温度列表[73、74、75、71、69、72、76和73],单调堆栈的初始状态为空。 其结果,result的初始状态为[0、0、0、0、0、0、0、0、0、0],单调堆栈内的答案按以下步骤更新

i=0时,单调堆栈为空,所以将0放入堆栈中。

sack=[0(73 ) ]

result=[0、0、0、0、0、0、0、0]

如果i=1,则75大于74,删除堆栈顶部元素1,分配result[0]=1-0,并将1放入堆栈中。

sack=[1(74 ) ]

result=[ 1,0,0,0,0,0,0,0 ]

如果i=2,则74大于73,删除堆栈顶部元素1,分配result[1]=2-1,并将1放入堆栈中。

sack=[2(75 ) ]

result=[ 1,1,0,0,0,0,0,0 ]

i=3时,71小于75,所以将3放入堆栈中

sack=[2(75 ),3 ) 71 ] ]

result=[ 1,1,0,0,0,0,0,0 ]

i=4时,69小于71,因此将4放入堆栈中

堆叠=[2(75 ),3 ) 71 ),4 ) 69]

result=[1、1、0、0、0、0、0、0]

如果i=5,则72大于69和71,因此按顺序删除堆栈顶部元素4和3,分配result[4]=5-4和result[3]=5-3,并将5放入堆栈中。

sack=[2(75 ),3 ) 72 ] ]

result=[ 1,1,0,2,1,0,0 ]

如果i=6,则76大于72和75,因此按顺序删除堆栈顶部元素5和2,分配result[5]=6-5和result[2]=6-2,并将6放入堆栈中。

sack=[2(75 ),3 ) 72 ] ]

result=[ 1,1,0,2,1,0,0 ]

如果I=7,73小于76,所以将7放入堆栈中。

堆叠=[6(76 ),7 ) 73 ] ]

result=[ 1,1,4,2,1,1,0,0 ]

Swift解题代码funcdailytemperatures (_ t : [ int ]-[ int ] { varresult=array (repeating 3360,count: T.count ) var sult ] value { letpreindex=stack.poplast (! result [ pre index ]=index-pre index } stack.append (index ) } return result } (返回结果测试之路)关注公众号,欢迎返回【领取资源】

Python编程学习资源的干货、

Python Appium框架APP的UI自动化、

Python Selenium框架Web的UI自动化、

Python Unittest框架自动化API、

资源和代码免费送到~

文章下面有公众号的二维码,直接微信扫清兴趣就行了。

如果

T[i] T[prevIndex],则将prevIndex移除,并将prevIndex对应的等待天数赋为i - prevIndex,

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。