左神算法书籍《程序员代码面试指南》——1_01设计一个有getMin功能的栈

Posted zzw1024

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了左神算法书籍《程序员代码面试指南》——1_01设计一个有getMin功能的栈相关的知识,希望对你有一定的参考价值。

【题目】

实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。

【要求】

1.pop、push、getMin操作的时间复杂度都是O(1)。
2.设计的栈类型可以使用现成的栈结构。

【题解】


实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
【要求】
1.pop、push、getMin操作的时间复杂度都是O(1)。
2.设计的栈类型可以使用现成的栈结构。


解题思路:
使用一个辅助栈,里面存的目前栈中的最小值

 1 #pragma once
 2 #include <iostream>
 3 #include <stack>
 4 
 5 using namespace std;
 6 
 7 //
 8 //实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
 9 //【要求】
10 //1.pop、push、getMin操作的时间复杂度都是O(1)。
11 //2.设计的栈类型可以使用现成的栈结构。
12 //
13 //
14 //解题思路:
15 //    使用一个辅助栈,里面存的目前栈中的最小值
16 
17 
18 class GetMin
19 
20 public:
21     void PushData(int a)
22     
23         Data.push(a);
24         if (Min.empty())
25             Min.push(a);//当还未存数时,目前栈中的最小值就是第一个数
26         else
27             Min.push(Min.top() <= a ? Min.top() : a);
28         //将新加入的数与栈中的最小值相比,存入新的最小值,以维持Data与Min栈的高度一样
29     
30 
31     int GetTop()
32     
33         if (Data.size())
34             return Data.top();
35         return -1;
36     
37 
38     int theMin()
39     
40         if (Data.size())
41             return Min.top();
42         return -1;
43     
44 
45     void PopData()
46     
47         if (Data.size())
48         
49             Data.pop();
50             Min.pop();
51         
52     
53 
54 private:
55     stack<int>Data;
56     stack<int>Min;
57 ;
58 
59 void main()
60 
61     GetMin ss;
62     ss.PushData(6);
63     cout << ss.theMin() << endl;
64     ss.PushData(5);
65     cout << ss.theMin() << endl;
66     ss.PushData(2);
67     cout << ss.theMin() << endl;
68     ss.PushData(1);
69     cout << ss.theMin() << endl;
70     ss.PushData(3);
71     cout << ss.theMin() << endl;
72     ss.PushData(6);
73     cout << ss.theMin() << endl;
74 
75     ss.PopData();
76     cout << ss.theMin() << endl;
77     ss.PopData();
78     cout << ss.theMin() << endl;
79     ss.PopData();
80     cout << ss.theMin() << endl;
81     ss.PopData();
82     cout << ss.theMin() << endl;
83 

 

以上是关于左神算法书籍《程序员代码面试指南》——1_01设计一个有getMin功能的栈的主要内容,如果未能解决你的问题,请参考以下文章

左神算法书籍《程序员代码面试指南》——2_06判断一个链表是否为回文结构

左神算法书籍《程序员代码面试指南》——3_02打印二叉树的边界节点★★

左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表

左神算法书籍《程序员代码面试指南》——1_10最大值减去最小值小于或等于num的子数组数量

左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表★★

左神算法书籍《程序员代码面试指南》——2_07将单向链表按某值划分成左边小中间相等右边大的形式