IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【Leetcode】1381. Design a Stack With Increment Operation -> 正文阅读

[数据结构与算法]【Leetcode】1381. Design a Stack With Increment Operation

题目地址:

https://leetcode.com/problems/design-a-stack-with-increment-operation/

要求设计一个栈,可以实现:
1、其容量为一个给定值。如果某个操作使得容量超过上限,则忽略此次操作。
2、void push(int x):加入一个数 x x x,如果超过上限则忽略;
3、int pop():如果栈空则返回 ? 1 -1 ?1,否则返回栈顶;
4、void inc(int k, int x):将从栈底开始的 k k k个数,每个数都加上 x x x。如果不足 k k k个,则栈中所有数都加上 x x x

可以使用懒标记。开两个向量 s s s a a a s s s表示栈本身, a a a存储的是加数懒标记,即 a [ i ] a[i] a[i]表示: s [ i ] s[i] s[i]中的数,如果不考虑 a [ i + 1 : ] a[i+1:] a[i+1:]的话,应该加上 a [ i ] a[i] a[i]才是真实值。push的时候,直接将 x x x加进 s s s,将 0 0 0加入 a a a;inc的时候,将 a [ k ? 1 ] a[k-1] a[k?1]加上 x x x,表示 s [ 0 : k ? 1 ] s[0:k-1] s[0:k?1]应该整体加上 x x x,但是还没有加,只是懒标记。在pop的时候,如果当前有 n n n个元素,则要执行a[n - 2] += a[n - 1],表示 s [ n ? 2 ] s[n-2] s[n?2]要补加上 a [ n ? 1 ] a[n-1] a[n?1],然后再返回 s [ n ? 1 ] + a [ n ? 1 ] s[n-1]+a[n-1] s[n?1]+a[n?1],并pop两个向量。代码如下:

class CustomStack {
 public:
  vector<int> stk, add;
  int cap;
  CustomStack(int maxSize) { cap = maxSize; }

  void push(int x) {
    if (stk.size() == cap) return;
    stk.push_back(x);
    add.push_back(0);
  }

  int pop() {
    if (stk.empty()) return -1;
    int n = stk.size(), res = stk[n - 1] + add[n - 1];
    if (n >= 2) add[n - 2] += add[n - 1];
    stk.pop_back();
    add.pop_back();
    return res;
  }

  void increment(int k, int val) {
    if (stk.empty()) return;
    k = min(k, (int)stk.size());
    add[k - 1] += val;
  }
};

所有操作时间复杂度 O ( 1 ) O(1) O(1),空间 O ( n ) O(n) O(n) n n n为栈中元素个数。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:43:26  更:2022-09-13 11:48:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:48:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码