左神算法书籍《程序员代码面试指南》——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的子数组数量