栈与单调栈

 

    
    # 入栈操作
    def push(self, value):
        cur = Node(value)
        cur.next = self.top
        self.top = cur
    
    # 出栈操作
    def pop(self):
        if self.is_empty():
            raise Exception('Stack is empty')
        else:
            cur = self.top
            self.top = self.top.next
            del cur

 等同于链表的插入和删除。

相比于链表其实简单了,因为堆栈没有next指针。

 for i in range(len(data)):
     stack.push(data[i])
     print(stack.peek())
 for i in range(len(data)):
     print(stack.pop())

 输出入栈时和出栈时的数值。

 while index + 1 < size and s[index + 1].isdigit():
     index += 1
     num = 10 * num + ord(s[index]) - ord('0')#两位数或者更多的解决方式

 解决了两位数以上的数字的方式,记一下

# 如果当前元素值较小,则直接让当前元素值入栈。
# 如果当前元素值较大,则一直出栈,直到当前元素值小于栈顶元素。
# 出栈时,出栈元素是第一个大于当前元素值的元素。则将其映射到 num_map 中。
算法笔记这里有点没搞懂,应该是说栈顶元素下一个更大的元素就是当前元素,然后弹出栈顶元素。代码的解释更清楚一些:
 while stack and num > stack[-1]:
    num_map[stack[-1]] = num
     stack.pop()

 

       ans = [0 for _ in range(n)]#巧妙地运用stack[-1]获得了index
             while stack and T[i] > T[stack[-1]]:
                index = stack.pop()
                ans[index] = (i-index)

用index来解决气温问题,值得注意。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值