由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - minstack不是吧?我的这么简单的leetcode code怎么也memory limit exceeded?
相关主题
怎么结果就不对呢leetcode 新题 Course Schedule用BFS怎么做?
Leetcode Min Stack问题用C设计Stack的interface,要求支持各种数据类型。
leetcode - 130的答案leetcode上遇到的问题
谈谈面试中化归的思想3sum on LeetCode OJ
白板代码,支持O(1)时间GetMin的stackleetcode 4sum N^3解法有时Time Limit Exceeded有时又能通过
Bloomberg phone interview 面经careercup一道amazon的面试题
过不了leetcode Zigzag Level Order Traversal对一些烂大街了的面试题, 要注意伪装
leetcode number of islands为什么不能用BFS?大G家的一道新题,来讨论讨论
相关话题的讨论汇总
话题: int话题: stack话题: getmin话题: return话题: void
进入JobHunting版参与讨论
1 (共1页)
f********f
发帖数: 290
1
debug一下,也没什么问题阿
class MinStack {
stack sk;
stack skm;//min stack
public:
void push(int x) {
sk.push(x);
if(skm.empty() || skm.top()>x)
skm.push(x);
else
skm.push(skm.top());
}
void pop() {
sk.pop();
skm.pop();
}
int top() {
return sk.top();
}
int getMin() {
return skm.top();
}
};
l********g
发帖数: 372
2
你的skm用的浪费啦!大数就不要push了。。。然后memory就够了
b******g
发帖数: 3616
3
才发现LC又出新题了。不过这题也是cc150的原题啊。。。。
我理解你的算法应该是当栈每压入一个新的x时,你记录当前的min(要么是x要么是skm
.top())然后同时压入skm。但这么做的问题是,你浪费了很多空间在skm上。假如依次
压入1-1000,那么你就需要存储2000个int。而实际上这种情况下在skm里存一个1就行
了。所以一个改进就是:
对于push时:只有当x<=skm.top(),才压入x进skm
相应对于pop时:只有当sk.top()==skm.top()时,才pop skm。
刚写了一个过了LC
class MinStack {
stack s;
stack trackMin;
public:
void push(int x) {
s.push(x);
if(trackMin.empty() || x<=trackMin.top())
trackMin.push(x);
}
void pop() {
if(s.empty()) return;
if(s.top()==trackMin.top()) trackMin.pop();
s.pop();
}
int top() {
// 这里还需要判断当栈为空时应该如何操作,比如throw exception
return s.top();
}
int getMin() {
// 这里还需要判断当栈为空时应该如何操作,比如throw exception
return trackMin.top();
}
};

【在 f********f 的大作中提到】
: debug一下,也没什么问题阿
: class MinStack {
: stack sk;
: stack skm;//min stack
: public:
: void push(int x) {
: sk.push(x);
: if(skm.empty() || skm.top()>x)
: skm.push(x);
: else

f********f
发帖数: 290
4
多谢,确实问题多多....
z***m
发帖数: 1602
5
主要是auxilary stack 太浪费, 只有当进来的数小于等于getMin(), 才push进。
void push(int x) {
if (st_aux.empty()) st_aux.push(x);
else {
if (x <= getMin()) {
//We only push to the min stack when the value being pushed onto
the main stack
//is less than or equal to the current min value
st_aux.push(x);
}
}
st.push(x);
}
相应的,pop的时候,只有当要出去的数等于getMin时才pop auxilary stack
void pop() {
if (!st_aux.empty() && st.top() == getMin()) {
st_aux.pop();
}
if (!st.empty()) {
st.pop();
}

}
g****9
发帖数: 163
6
My code also complains memory limit exceed. Any suggestions why?
LinkedList stack = new LinkedList();
LinkedList ministack = new LinkedList();

public void push(int x) {
stack.add(x);
if (ministack.isEmpty() || ministack.getLast() >= x) {
ministack.add(x);
}
}
public void pop() {
if (stack.isEmpty()) {
return;
}
int ele = stack.removeLast();
if (!ministack.isEmpty() && ministack.getLast() == ele) {
ministack.removeLast();
}
}
public int top() {
if (!stack.isEmpty())
return stack.getLast();
return 0;
}
public int getMin() {
if (!ministack.isEmpty())
return ministack.getLast();
return 0;
}
f*****u
发帖数: 308
7
应该是Java的LinkedList占的空间大了点,你改成Java自带的Stack就能过OJ了。

【在 g****9 的大作中提到】
: My code also complains memory limit exceed. Any suggestions why?
: LinkedList stack = new LinkedList();
: LinkedList ministack = new LinkedList();
:
: public void push(int x) {
: stack.add(x);
: if (ministack.isEmpty() || ministack.getLast() >= x) {
: ministack.add(x);
: }
: }

r*****e
发帖数: 792
8
记得有不用额外的stack的解法啊,不过似乎leetcode不支持long long int
没法handle underflow的情况。比如,push(int_max), push(int_min)的
情况。
有人用不要额外的stack试过吗?

【在 f********f 的大作中提到】
: debug一下,也没什么问题阿
: class MinStack {
: stack sk;
: stack skm;//min stack
: public:
: void push(int x) {
: sk.push(x);
: if(skm.empty() || skm.top()>x)
: skm.push(x);
: else

n*********u
发帖数: 1030
9

discussion里面有个自己加个node class上去不用stack的写法。

【在 r*****e 的大作中提到】
: 记得有不用额外的stack的解法啊,不过似乎leetcode不支持long long int
: 没法handle underflow的情况。比如,push(int_max), push(int_min)的
: 情况。
: 有人用不要额外的stack试过吗?

r*****e
发帖数: 792
10
还是用stack正常啊
还是想看看不用额外的stack的
能过oj的解法

【在 n*********u 的大作中提到】
:
: discussion里面有个自己加个node class上去不用stack的写法。

b******g
发帖数: 3616
11
不用额外的stack,应该也得用其他形式的额外空间吧。
比如用stack>,然后这个pair.first记录压入的数据,pair.second记
录压入时的min。但这样和两个stack其实也是一样的意思,而且占用空间更大。
存在constant extra space的单stack解法?愿闻其详

【在 r*****e 的大作中提到】
: 记得有不用额外的stack的解法啊,不过似乎leetcode不支持long long int
: 没法handle underflow的情况。比如,push(int_max), push(int_min)的
: 情况。
: 有人用不要额外的stack试过吗?

r*****e
发帖数: 792
12
就是当要push的value val小于当前的min时,push 2*val-min
这个值是小于val的,然后min更新为val。
当pop的时候,如果top的值小于min的话,就说明要把min pop出去了,
要更新min的值为 2*min-top。相应的top函数也要做这样的转换。
不过这个算法做减法时会underflow,如果数据为int的话,但是用
long long oj memory exceeded limit

【在 b******g 的大作中提到】
: 不用额外的stack,应该也得用其他形式的额外空间吧。
: 比如用stack>,然后这个pair.first记录压入的数据,pair.second记
: 录压入时的min。但这样和两个stack其实也是一样的意思,而且占用空间更大。
: 存在constant extra space的单stack解法?愿闻其详

r*****e
发帖数: 792
13
又想了想,用long long memory上
没比用额外的stack好。

【在 r*****e 的大作中提到】
: 就是当要push的value val小于当前的min时,push 2*val-min
: 这个值是小于val的,然后min更新为val。
: 当pop的时候,如果top的值小于min的话,就说明要把min pop出去了,
: 要更新min的值为 2*min-top。相应的top函数也要做这样的转换。
: 不过这个算法做减法时会underflow,如果数据为int的话,但是用
: long long oj memory exceeded limit

b******g
发帖数: 3616
14
思路倒是很巧妙。不过用long long感觉memory更差啊,space直接变成2n。用2个stack
的话最差情况才是2n。而且操作还简单。

【在 r*****e 的大作中提到】
: 又想了想,用long long memory上
: 没比用额外的stack好。

1 (共1页)
进入JobHunting版参与讨论
相关主题
大G家的一道新题,来讨论讨论白板代码,支持O(1)时间GetMin的stack
CareerCup questionBloomberg phone interview 面经
还有两个题。过不了leetcode Zigzag Level Order Traversal
a problem from leetcode: high efficiency algorithm for combinations problemleetcode number of islands为什么不能用BFS?
怎么结果就不对呢leetcode 新题 Course Schedule用BFS怎么做?
Leetcode Min Stack问题用C设计Stack的interface,要求支持各种数据类型。
leetcode - 130的答案leetcode上遇到的问题
谈谈面试中化归的思想3sum on LeetCode OJ
相关话题的讨论汇总
话题: int话题: stack话题: getmin话题: return话题: void