标签:书籍 个数 基本功 解题思路 pushd namespace pop 思路 color
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
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功能的栈
标签:书籍 个数 基本功 解题思路 pushd namespace pop 思路 color
原文地址:https://www.cnblogs.com/zzw1024/p/11170332.html