码迷,mamicode.com
首页 > 其他好文 > 详细

包含min函数的栈

时间:2016-03-29 23:56:35      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

需要O(1)时间求出最小值。如果换成最大值,那就和“滑动窗口的最大值”一题思路差不多了。

用一个栈保存元素,用另一个栈来存储最小值,如果新增的元素比栈顶元素小则压入,否则不压入。

如果检测到第一个栈把最小元素弹出了,那么另一个栈也弹出栈顶元素。

“滑动窗口的最大值”更加复杂一点,而且是用deque保存最大值,如果新增的元素比deque中某些元素大,那么必须把小的元素都去除,然后在deque尾部加入这个新元素。

这里附上“滑动窗口的最大值”的代码。

技术分享
 1 class Solution {
 2 public:
 3     vector<int> maxInWindows(const vector<int>& num, unsigned int size)
 4     {
 5         deque<int> id;
 6         vector<int> record;
 7         if(num.size()==0||size==0||size>num.size())
 8             return record;
 9         for(int i=0;i<size;i++)
10         {
11             while(!id.empty())
12             {
13                 if(id.back()<num[i])
14                     id.pop_back();
15                 else
16                     break;
17                }
18                id.push_back(num[i]);
19         }
20         record.push_back(id.front());
21         if(size<num.size())
22         {      
23             int rear=size;
24             int front=0;
25             while(rear<num.size())
26             {
27                 if(id.front()==num[front])
28                     id.pop_front();
29                 while(!id.empty())
30                 {
31                     if(id.back()<num[rear])
32                         id.pop_back();
33                     else
34                         break;
35                 }
36                 id.push_back(num[rear]);
37                 record.push_back(id.front());
38                 front++;
39                 rear++;
40             }
41         }
42         return record;
43     }
44 };
View Code

 

包含min函数的栈

标签:

原文地址:http://www.cnblogs.com/vaecn/p/5335153.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!