1381. Design a Stack With Increment Operation (M)

modelsim软件安装教程及踩坑(极简版) 1.安装的网盘链接:链接:https://pan.baidu.com/s/1ltUfssyXlCnqDmLhWyhlwA提取码:jery 2.步骤(参考博文):https://blog.csdn.net/weixin_42693097/article/details/90523692?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163521788716780357213801%2522%252C%2522scm%2522%253A%2522 阅读详情

Design a Stack With Increment Operation (M)

Design a stack which supports the following operations.

Implement the CustomStack class:

  • CustomStack(int maxSize) Initializes the object with maxSize which is the maximum number of elements in the stack or do nothing if the stack reached the maxSize.
  • void push(int x) Adds x to the top of the stack if the stack hasn’t reached the maxSize.
  • int pop() Pops and returns the top of stack or -1 if the stack is empty.
  • void inc(int k, int val) Increments the bottom k elements of the stack by val. If there are less than k elements in the stack, just increment all the elements in the stack.

Example 1:

Input
["CustomStack","push","push","pop","push","push","push","increment","increment","pop","pop","pop","pop"]
[[3],[1],[2],[],[2],[3],[4],[5,100],[2,100],[],[],[],[]]
Output
[null,null,null,2,null,null,null,null,null,103,202,201,-1]
Explanation
CustomStack customStack = new CustomStack(3); // Stack is Empty []
customStack.push(1);                          // stack becomes [1]
customStack.push(2);                          // stack becomes [1, 2]
customStack.pop();                            // return 2 --> Return top of the stack 2, stack becomes [1]
customStack.push(2);                          // stack becomes [1, 2]
customStack.push(3);                          // stack becomes [1, 2, 3]
customStack.push(4);                          // stack still [1, 2, 3], Don't add another elements as size is 4
customStack.increment(5, 100);                // stack becomes [101, 102, 103]
customStack.increment(2, 100);                // stack becomes [201, 202, 103]
customStack.pop();                            // return 103 --> Return top of the stack 103, stack becomes [201, 202]
customStack.pop();                            // return 202 --> Return top of the stack 102, stack becomes [201]
customStack.pop();                            // return 201 --> Return top of the stack 101, stack becomes []
customStack.pop();                            // return -1 --> Stack is empty return -1.

Constraints:

  • 1 <= maxSize <= 1000
  • 1 <= x <= 1000
  • 1 <= k <= 1000
  • 0 <= val <= 100
  • At most 1000 calls will be made to each method of increment, push and pop each separately.

题意

实现一个拥有指定操作的栈。

思路

最简单的就是直接照着题目意思实现这个栈。

也存在increment()方法为 O ( 1 ) O(1) O(1)的解法:[Java/C++/Python] Lazy increment, O(1)


代码实现

class CustomStack {
    private List<Integer> stack;
    private int maxSize;

    public CustomStack(int maxSize) {
        stack = new ArrayList<>();
        this.maxSize = maxSize;
    }

    public void push(int x) {
        if (stack.size() == maxSize) {
            return;
        }
        stack.add(x);
    }

    public int pop() {
        if (stack.size() == 0) {
            return -1;
        }
        return stack.remove(stack.size() - 1);
    }

    public void increment(int k, int val) {
        int pos = Math.min(k, stack.size());
        for (int i = 0; i < pos; i++) {
            stack.set(i, stack.get(i) + val);
        }
    }
}

代码实现 - O(1) increment()

class CustomStack {
    private Deque<Integer> stack;
    private int maxSize;
    private int[] append;

    public CustomStack(int maxSize) {
        stack = new ArrayDeque<>();
        this.maxSize = maxSize;
        append = new int[maxSize];
    }

    public void push(int x) {
        if (stack.size() == maxSize) {
            return;
        }
        stack.push(x);
    }

    public int pop() {
        if (stack.size() == 0) {
            return -1;
        }
        int pos = stack.size() - 1;
        if (pos > 0) {
            append[pos - 1] += append[pos];
        }
        int res = stack.pop() + append[pos];
        append[pos] = 0;
        return res;
    }

    public void increment(int k, int val) {
        int pos = Math.min(k, stack.size()) - 1;
        if (pos >= 0) {
            append[pos] += val;
        }
    }
}
opencode : 无法将“opencode”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案 本文主要介绍了opencode : 无法将“opencode”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案,希望能对使用opencode的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 阅读详情

相关推荐

智能车竞赛卡丁快跑组:自动驾驶与人车交互技术实战解析

本文深入解析了智能车竞赛卡丁快跑组的技术核心,重点探讨了自动驾驶与人车交互两大模块的实战方案。文章详细拆解了从环境感知、路径规划到语音识别、命令执行的完整流程,并分享了基于单片机平台的调试心法与赛场经验,为参赛者提供了一套从零开始、分步攻坚的系统性备赛指南。

f0g1h2的博客 1177

c语言顺序栈的表示和实现

#define STACK_INIT_SIZE 100//初始大小(100个数据长度) #define STACKINCREMENT 10//栈的分配增量 typedef int ElemType;//栈储存的数据类型 typedef enum { ERROR = 0, OK = 1 }Status;//枚举返回函数运行结果 typedef struct { ElemType *base;/

zero_hzz的博客 1151

2024最新版Anaconda Navigator安装使用指南

本文简要介绍如何下载安装Anaconda Navigator最新版,以及如何使用Python内核搭载来完成应用程序开发。

jackson_lingua的博客 1万+

栈的基本操作

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

青耕_的博客 1230

ONNC Open Neural Network Compiler 开源神经网络编译器 一个 开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)部署导入ONNX模型

ONNC是一个集合了开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)。ONNC从底层开始构建,旨在将ONNX中间表示(IR)翻译成专有DLA代码。其软件架构设计强调可移植性和可重用性,从而简化了开发新后端的工作。上图展示了ONNC软件栈的顶层框图。软件栈从导入ONNX计算图模型到输出相应的硬件二进制文件,展示了各个功能块。

万有文的博客 1992

基于激光雷达的目标跟随功能移植到自己的ROS机器人小车上

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、下载目标跟随的源码二、修改话题名称1.修改/cmd_vel话题名称2.修改/scan话题名称3.修改双电机正反转4.目标跟随功能测试 前言 本人尝试把github上的一个目标跟随项目移植到自己的机器人小车上,并且成功了,最终小车可以跟着人移动,在这里分享一下心得。基于激光雷达的目标跟随,通过获取激光雷达的信息,跟随最近的物体。 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载目标跟随的源码 源码地址:https:

weixin_44574633的博客 4461

数据结构---栈(代码实现)

/#define STACK_SIZE 100 //栈初始向量的大小//#define STACKINCREMENT 10 //存储空间分配增量//{//栈不存在时,值为NULL//栈顶指针//当前已分配空间,已元素为单位//}SqStack;//#define MAX_STACK_SIZE 100 //栈(顺序静态)向量的大小//{// int Top;//栈顶变量//数组//2.栈(顺序静态)的初始化(建栈)s.Top=0;//空栈//{////

jie18894575860的博客 1132

CMOS 半加器和全加器&&数字集成电路&& Cadence Virtuoso

数字集成电路——半加器和全加器

计科小学生的博客 1万+

数据结构第十二节

栈的顺序存储结构简称为顺序栈,和线性表相类似,用一维数组来存 储栈。 ◆ 静态顺序栈 实现简单,但不能根据需要增大栈的存储空间; ◆ 动态顺序栈 可以根据需要增大栈的存储空间,但实现稍为复杂。base和top指针分别指向在堆中分配数组表示栈的栈顶和栈底, stacksize表示栈空间的大小。当初始化栈时InitStack,从堆中分配 STACK_INIT_SIZE大小的空间。当执行压栈操作时查看空间容量stacksize 够不够,如果不够将堆空间从新分配增加STACKINCREMENT存入数据。 base和

weixin_62003871的博客 233

14、5G物理层的灵活解决方案:广义频分复用(GFDM)

广义频分复用(GFDM)作为一种高度灵活的5G物理层多载波调制方案,能够满足多样化应用场景的需求,包括高吞吐量的比特管道通信、低功耗高连接数的物联网、超低延迟的触觉互联网以及广覆盖的无线区域网。通过参数化配置,GFDM可适配LTE资源网格,实现与现有系统的兼容与共存。其支持多种解调方式、干扰消除技术、OQAM映射及预编码机制,兼具低带外发射、高频谱效率和强鲁棒性。GFDM还能统一描述OFDM、FBMC、FTN等多种经典与先进波形,成为5G及未来通信系统中极具潜力的通用波形框架。

gold8的专栏 108

YOLOv11 改进 - 特征融合 | 小目标检测救星:DySample动态上采样减少特征丢失

本文介绍了超轻量且高效的动态上采样器DySample与YOLOv11的结合,以解决传统上采样器工作负载大、应用场景受限的问题。DySample从点采样角度构建上采样,绕过动态卷积,使用PyTorch标准内置函数实现,无需定制CUDA包,能大幅减少参数、FLOPs等资源消耗。我们将DySample代码集成进YOLOv11。实验脚本显示,结合DySample的YOLOv11在多个密集预测任务中或表现出色。

魔改工程师的博客 1415

数据结构——栈

栈(stack)又称堆栈,是一种运算受限的线性表。栈的限制是仅允许在表的一端进行插入和删除操作,被允许操作的一端被称为栈顶,另一端则被称为栈底,如图下图所示。向一个栈中,它把新元素放到栈顶元素的上面,使之成为新的栈顶元素。从一个中,它把栈顶元素删除,使其相邻的元素成为新的栈顶元素。由于堆栈只允许在一端进行操作,所以遵循后进先出(Last In First Out,LIFO)的操作原则。栈的操作:初始化栈入栈出栈返回栈顶元素(但不弹出)判断栈是否为空栈的大小。

MissedID_的博客 1152

YOLOv11【第三章:高阶应用与落地篇·第1节】一文搞懂,YOLOv11-Seg 实例分割:Mask 原型生成与系数预测原理解析!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 1248

【leetcode】第 180 场周赛

赛后总结 这场状态还不错,可惜遇到了知识盲点,以及hard虽然有思路但没能快速实现。差一点就能完成flag了。 第1题:弄清思路后就很快,出了一个低级错误,耽误了很久。 第2题:程序设计类的题,没什么难度。 第3题:平衡树是弱项,需要补一下。 第4题:dp题,想出来了解法,但实现稍复杂,速度太慢。 优点 1.状态稳定,该做的做完了。 缺点&改进 1.低级错误! 2.平衡...

lemonade13的博客 228

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数据结构入门----栈的概念及应用

栈的逻辑结构 栈:限定仅在表尾进行插入和删除操作的线性表。(a1, a2, ……, an) 空栈:不含任何数据元素的栈。 允许插入和删除的一端称为栈顶,另一端称为栈底。 插入:入栈、进栈、压栈 删除:出栈、弹栈 栈的操作特性:后进先出为原则LIFO 注意:栈只是对表插入和删除操作的位置进行了限制,并没有限定何时进行插入和删除操作。 栈的抽象数据类型定义 InitStack (&S) (构造空栈 ) 操作结果:构造一个空栈S。 DestroyStack(&...

qq1457346557的博客 997

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Leetcode 1381.设计一个支持增量操作的栈(Design a Stack With Increment Operation)

Leetcode 1381.设计一个支持增量操作的栈 1 题目描述(Leetcode题目链接)   请你设计一个支持下述操作的栈。 实现自定义栈类 CustomStack : CustomStack(int maxSize):用 maxSize 初始化对象,maxSize 是栈中最多能容纳的元素数量,栈在增长到 maxSize 之后则不支持 push 操作。 void push(int x):如果栈还未增长到 maxSize ,就将 x 添加到栈顶。 int pop():弹出栈顶元素,并返回栈顶的值,或栈

qq_39378221的博客 273

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

数据结构学习笔记之栈

栈(stack) 是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈项(top),相应地,表头端称为栈底(bottom)。不含元素的空表称为空栈。

Mirale的专栏 1871

栈(1)---栈的基本定义

一:栈的类型定义:   1.相关概念:          (1)定义:只能在表的一端进行插入和删除的一种线性表          (2)存储结构:用顺序栈或链栈存储均可,但以顺序栈更常见          (3)运算规则:只能在栈顶运算,且访问结点时依照后进先出(LIFO)的原则          与线性表的区别:           二:栈的表示和实现 *顺序栈

王帆的专栏 1655

【Leetcode】1381. Design a Stack With Increment Operation

1、其容量为一个给定值。如果某个操作使得容量超过上限,则忽略此次操作。,但是还没有加,只是懒标记。在pop的时候,如果当前有。push的时候,直接将。,并pop两个向量。,如果超过上限则忽略;个,则栈中所有数都加上。存储的是加数懒标记,即。

数学、算法爱好者的博客 306

leetcode 1381. Design a Stack With Increment Operation(python)

根据题意,就是要求自己设计一个栈相关的操作,每个方法都规定了输入、操作方法和输出,思路比较简单:通过列表及其相关的内置函数完成相关的操作即可,只要懂得了栈的概念,实现起来比较简单。原题链接:https://leetcode.com/problems/design-a-stack-with-increment-operation/您的支持是我最大的动力。

王大呀呀的博客 588

栈讲解

栈 栈 stack 限定仅在表尾进行插入删除操作的线性表,表尾称栈顶 top 表头称栈底 bottom 栈又称先进后出的线性表 LIFO 栈抽象数据类型定义 ADT Stack{ 数据对象 数据关系 基本操作 InitStack(&amp;S) //构造空栈 DestroyStack(&amp;S) //销毁栈 ClearStack(&amp;S) //清空栈 Stac...

wyzworld的博客 839

Design a Stack With Increment Operation

Design a stack which supports the following operations. Implement theCustomStackclass: CustomStack(int maxSize)Initializes the object withmaxSizewhich is the maximum number of elements in the stack or do nothing if the stack reached themaxSize. vo...

leetcode 解题思路 244

堆栈stack的基本操作

/*栈的模板可以用数组,单链表,以及stack堆栈来实现 */ /*建议电脑查看*/ #include &lt;cstdio&gt; #include &lt;stack&gt; /*堆栈*/ using namespace std; void print( stack&lt;int&gt; a, int n ); void clear( stack&lt;int&gt; b ); /*清空...

成龙大侠的博客 2479

关于C++ stack(栈)的用法

首先,你得写个头文件: #include &amp;amp;lt;stack&amp;amp;gt; 那么如何定义一个栈呢? stack &amp;amp;lt;类型&amp;amp;gt; 变量名 接下来是一些关于栈的基本操作~ stack &amp;amp;lt;int&amp;amp;gt; s;(以这个为例子) 1.把元素a加入入栈:s.push(a); 2.删除栈顶的元素:s.pop(); 3.返回栈顶的元素:s.top(); 4.判断栈是否为

ZZY的博客 4994

LeetCode每日一题(1381. Design a Stack With Increment Operation)

Design a stack which supports the following operations.Implement the CustomStack class:CustomStack(int maxSize) Initializes the object with maxSize which is the maximum number of elements in the stack or do nothing if the stack reached the maxSize. void pu

wangjun861205的博客 219

LeetCode:1381. 设计一个支持增量操作的栈

class CustomStack { public: int top=-1; vector<int>obj; CustomStack(int maxSize) { obj.resize(maxSize); } void push(int x) { if(top+1!=obj.size())//这里要加上一个判断,不然会导致越界 obj[++top]=x; } in

dosdiosas_的博客 223
上一篇: 1382. Balance a Binary Search Tree (M)
下一篇: 1383. Maximum Performance of a Team (H)
绿色小光头
博客等级 码龄10年 10粉丝 301原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值