【刷题记录】剑指offer+Leetcode75 DAY1

剑指offer

都是栈相关的题目,python里栈用数组实现,主要用到append()、pop()
设计题要在__init__(self)里定义数组,self.stack=[],在下边的函数中使用时也要带上self.

09. 用两个栈实现队列(简单)

解题方法:用辅助栈实现先进先出,辅助栈的栈顶(数组中最后一个元素)就是队列的队头

30. 包含min函数的栈(简单)

难点:min函数的实现,即如何找到栈中的最小值
解题方法:

  1. 使用额外空间:用辅助栈存储主栈中的非严格降序,将辅助栈的栈顶与主栈中遍历到的数x对比,若x更小则压入栈中,这一步在push()函数中就要实现,同时注意如果最小值被pop()了,辅助栈中也要一起pop()
  2. 不使用额外空间——保存差值法 :用minv存当前最小值,push(x)存的是传入参数x与当前最小值的差值。当pop()出的数是负数(说明最小值被pop())时,将minv更新为当前最小值 - 栈顶,即做还原操作。返回栈顶top()时,如果top非负(说明比最小值大),需要加上minv还原为原来的值;top小于0表示上一次x比min小,x的值已经被赋给min了,所以可以直接用min

Leetcode75

都是数组相关题目,主要解法是前缀和

1480. 一维数组的动态和(简单)

解法:nums[i]=nums[i-1]+nums[i]

724. 寻找数组的中心下标(简单)

解题核心:数组所有元素之和为total,nums[i]左侧元素之和为 sum,则其右侧元素之和为 total−nums[i]−sum。左右侧元素相等即为 sum=total−nums[i]−sum,即nums[i]=total-2*sum

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值