155. Min Stack
admin
2024-02-06 15:02:28
0

题目名称

  1. Min Stack

题目描述

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

Implement the MinStack class:

MinStack() initializes the stack object.
void push(int val) pushes the element val onto the stack.
void pop() removes the element on the top of the stack.
int top() gets the top element of the stack.
int getMin() retrieves the minimum element in the stack.
You must implement a solution with O(1) time complexity for each function.

初试思路

获取最小值时,如果在获取时再遍历栈找到最小值是很慢的,所以在push和pop的时候保持最小值的动态更新。

初试代码

// 我的代码
class MinStack {
public:vector > a;MinStack() {}void push(int val) {if(isEmpty()){a.push_back({val, val});}else{a.push_back({val, min(val, a.back().second)});                                             }}void pop() {if(!isEmpty()){a.pop_back();  }}int top() {if(!isEmpty()){return a.back().first; }return 0;}int getMin() {if(!isEmpty()){return a.back().second;  }return 0;        }bool isEmpty(){ //这个函数也可以直接用vector的a.empty()代替cout<<(a.size()==0)<push(val);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->getMin();*/

学到了啥

一、capacity相关函数

1.size:size_type size() const;

容器中元素个数。c.size();

2.max_size():size_type max_size() const;

返回最大容量。c.maxsize();

3.resize:void resize (size_type n, value_type val = value_type());

改变容器可以容纳元素的个数为n。如果n小于当前的容器大小,则保留前面n个元素,移除后面的。如果n大于当前容器大小,就扩展容器。value是初始值,如果n大于当前容器大小,则新增加的元素的值为value,若value省略,会自动调用一个默认值。

std::vector c;

for(int i=0;i<10;i++)

 c.push_back(i);

c.resize(5);

c.resize(8,10);

c.resize(12);

for(int i=0;i

std::cout<

结果为:1 2 3 4 5 10 10 10 0 0 0 0

4.capacity:size_type capacity() const;

当前分配给容器的存储空间大小(元素个数),这并不限制容器的扩展,理论限制容器扩展大小是max_size的值

5.empty:bool empty() const;

返回容器是否为空while(!c.empty()){sum+=c.back();
c.pop_back();}

6.reserve:void reserve (size_type n);

使得capacity至少能容纳n个元素。

7.shrink_to_fit(C++11):void shrink_to_fit();

减小capacity,使其与容器大小相同

四、元素访问相关函数

1.[ ]操作:获取特定位置的元素。c[i];

2.at:reference at (size_type n);

   const_reference at (size_type n) const;

返回位置n处的元素。c.at(i),与c[i]差不多

3.front:reference front();

           const_reference front() const;

返回容器中的第一个元素。c.front();

4.back:reference back()

    const_reference back() const;

返回容器中最后一个元素。c.back();

5.data(C++11):value_type* data() noexcept;

       const value_type* data() const noexcept;

返回一个指向容器中数组的指针c.data()

int *p=c.data();

*p=10;

++p;

*p=20;

p[2]=100;

则c中存储的前面三个数据为10、20、100

五、更新操作

1.assign:template void assign (InputIterator first, InputIterator last);

           void assign (size_type n, const value_type& val);void assign (initializer_list il);(C++11)

给容器分配新的内容,并替换当前内容,同时修改大小,val为初始值

std::vectorfirst;

std::vectorsecond;

std::vectorthird;

first.assign(7,100);

std::vector::iterator it;

it=first.begin()+1;

second.assign(it,first.end()-1);

int myints[]={1776,7,4};

third.assign(myints,myints+3);

std::cout<

结果为:7 5 3

2.push_back: void push_back (const value_type& val);

在容器最后增加一个新的元素。c.push_back(n)

3.pop_back:void pop_back();

移除最后一个元素。c.pop_back()

4.insert:iterator insert(iterator position,const value_type& val):在position处插入元素val

         void insert(iterator position,size_type n,const value_type& val):在position处插入n个元素,插入的元素值初始化为valvoid insert(iterator position,InputIterator first,InputIterator last):在position处插入数组中从first到last的元素

vector c(3,100);

vector::iterator it;

it=c.begin();

it=c.insert(it,200);

c.insert(it,2,300);

it=c.begin();

vector d(2,400);

c.insert(it+2,d.begin(),d.end());

int s[]={501,502,503};

c.insert(c.begin(),s,s+3);

此时c中元素为:501 502 503 300 300 400 400 200 100 100 100

5.erase:iterator erase(iterator position):删除position处的元素

         iterator erase(iterator first,iterator last):删除first到last的元素

相关内容

热门资讯

我来教大家“掼蛋大师辅助器ap... 亲,掼蛋大师这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,掼蛋大师的开挂软件,名...
我来教大家“开心联盟辅助器ap... 您好,开心联盟这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
我来教大家“友愉棋牌辅助器ap... 您好,友愉棋牌这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
我来教大家“全盛棋牌辅助器ap... 亲,全盛棋牌这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,全盛棋牌的开挂软件,名...
我来教大家“情怀三三麻将辅助器... 我来教大家“情怀三三麻将辅助器app官方下载最新版本更新”详细分享开挂一、情怀三三麻将AI软件牌型概...
我来教大家“无锡好运麻将辅助器... 亲,无锡好运麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,无锡好运麻将的开挂...
我来教大家“推筒子辅助器app... 您好,推筒子这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打牌...
我来教大家“比奇堡辅助器app... 我来教大家“比奇堡辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方神...
我来教大家“新兴茶苑辅助器ap... 我来教大家“新兴茶苑辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“欢乐互动辅助器ap... 我来教大家“欢乐互动辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“东方互娱辅助器ap... 亲,东方互娱这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,东方互娱的开挂软件,名...
我来教大家“天天乐清麻将辅助器... 我来教大家“天天乐清麻将辅助器app官方下载最新版本更新”详细分享开挂一、天天乐清麻将AI软件牌型概...
我来教大家“唐三彩辅助器app... 我来教大家“唐三彩辅助器app官方下载最新版本更新”详细分享开挂一、唐三彩AI软件牌型概率发牌机制”...
我来教大家“Y0辅助器app官... 我来教大家“Y0辅助器app官方下载最新版本更新”详细分享开挂一、Y0AI软件牌型概率发牌机制”必胜...
我来教大家“天天互娱辅助器ap... 亲,天天互娱这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,天天互娱的开挂软件,名...
我来教大家“悟空竞技麻将辅助器... 亲,悟空竞技麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,悟空竞技麻将的开挂...
我来教大家“情怀开化麻将辅助器... 我来教大家“情怀开化麻将辅助器app官方下载最新版本更新”详细分享开挂一、情怀开化麻将AI软件牌型概...
我来教大家“龙炎互娱辅助器ap... 我来教大家“龙炎互娱辅助器app官方下载最新版本更新”详细分享开挂一、龙炎互娱AI软件牌型概率发牌机...
我来教大家“闲逸碰胡辅助器ap... 亲,闲逸碰胡这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,闲逸碰胡的开挂软件,名...
我来教大家“友聚麻将辅助器ap... 我来教大家“友聚麻将辅助器app官方下载最新版本更新”详细分享开挂一、友聚麻将AI软件牌型概率发牌机...