首页 > 编程知识 正文

python3,python的特点

时间:2023-05-04 11:58:56 阅读:34587 作者:1524

什么是单调堆栈? 堆栈是一种先进的后出数据结构,单调堆栈是指存储在堆栈中的数据总是有序的,可以分为单调递增堆栈和单调递减堆栈

单调递增栈:单调递增栈是指从栈底到栈顶的数据从大到小的单调递减栈。 单调递减堆栈是指从堆栈底部到堆栈顶部的数据从小到大的应用leetcode可以用单调堆栈解决很多问题。 用python实现,用列表list模拟堆栈。 以下主题都是使用的单调增加堆栈。

获取数组中每个元素的下一个大元素。 例如,如果获取[ 1,3,4,2 ]中每个元素的较大值,但不返回-1,则为[ 3,4,-1,-1]

类别解决方案3360 defnextgreaterelement (self, nums ) : if len (nums )==0:return ) RES=[ ] stack=[ ] length=0and stack [-1 ] nums [ j ] : stack.pop (ion 如果最后一个堆栈中仍有元素,则堆栈顶部的元素是当前元素的下一个最大值;如果堆栈为空,则不存在下一个最大元素。 (不影响第i-1个要素的处理。 这是因为pop小于当前元素I,并且当前元素I后面的元素出现,不能称为第i-1个元素的结果。 )将当前元素放入堆栈中,处理以下元素: 496 .以下更大元素I :

与上述解法相同,但需要额外的空间来记录。 对应于nums1中每个数量的索引。 用单调堆栈处理nums2,得到nums2中所有元素的次大元素。 接着,将nums1中显示的要素的下一个最大的要素配置在与res对应的位置。

类别解决方案: defnextgreaterelement (self,nums1: List[int], nums 23360 list [ int ]-list [ int ] : if len [ numS1 ]==0or len [ num S2 ]==0: return [ ] #记录num S1数组中包含的数量的索引=0and stack [-1 ] num S2 [ j ] :堆叠. pop (if len (堆叠)==0: cur=-1 else 3360 cur=堆叠(-1 ) ifnums2(in

空间复杂性: o(Len ) num S2 (len ) nums1 ) )

503 .以下更大元素II :

循环数组,最后一个元素的下一个大元素不再是-1,而是通过再次复制数组来解决循环数组问题

class解决方案: defnextgreaterelements (self,nums 3360 list [ int ] (list [ int ] : if len (nums )==03: returnurn numsums=0and stack [-1 ]=tmp _ nums [ I ] : stack.pop (if len (stack )==0: cur=-1 else 3360 cur=stack (-1 ) ii sack

空间复杂性: o(n ) ) ) )。

739 .每日温度

在这里,不是要求下一个更大的要素,而是要求距离下一个更大的要素几天。 因此,堆栈中存储的是当前元素的索引

class解决方案: defdailytemperatures (self,temperatures : list [ int ]-list [ int ] : if len (temperatures (=0: )=0and temperatures [ stack [-1 ]=temperatures [ I ] : stack.pop (if len ) stack )==0: res.append(0) eler RES.append (索引- I ) stack.append(i ) I ) res.reverse ) (返回RES时间复杂度: o(n ) ) )。

空间复杂性: o(n ) ) ) )。

还有其他需要使用单调堆栈的复杂主题,如leetcode 84、leetcode 739和leetcode 1673

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