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

2020-12-13 06:13

阅读:203

标签:书籍   个数   基本功   解题思路   pushd   namespace   pop   思路   color   

【题目】

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

【要求】

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

【题解】


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


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

 1 #pragma once
 2 #include  3 #include  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()  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     stackint>Data;
56     stackint>Min;
57 };
58 
59 void main()
60 {
61     GetMin ss;
62     ss.PushData(6);
63     cout  endl;
64     ss.PushData(5);
65     cout  endl;
66     ss.PushData(2);
67     cout  endl;
68     ss.PushData(1);
69     cout  endl;
70     ss.PushData(3);
71     cout  endl;
72     ss.PushData(6);
73     cout  endl;
74 
75     ss.PopData();
76     cout  endl;
77     ss.PopData();
78     cout  endl;
79     ss.PopData();
80     cout  endl;
81     ss.PopData();
82     cout  endl;
83 }

 

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

标签:书籍   个数   基本功   解题思路   pushd   namespace   pop   思路   color   

原文地址:https://www.cnblogs.com/zzw1024/p/11170332.html


评论


亲,登录后才可以留言!