1hour,两个地方的问题。第一次面向测试用例编程
# -*- coding:utf-8 -*-
class Solution:
tmp=[]
def IsPopOrder(self, pushV, popV):
if not popV or not pushV:return False #鲁棒性
for a in pushV:
if popV[0]==a:
popV.pop(0)
while self.tmp and popV and self.tmp[-1]==popV[0]: # 这里会越界
self.tmp.pop() #这里少了把tmp中弹出
popV.pop(0)
else:
self.tmp.append(a)
if not popV: return True
else:return False
if __name__ == '__main__':
t=Solution()
print(t.IsPopOrder([1,2,3],[1,2,3]))
print(t.IsPopOrder([1,2,3,4,5],[4,5,3,2,1]))
print(t.IsPopOrder([],[]))
print(t.IsPopOrder([1],[]))
print(t.IsPopOrder([],[1]))
print(t.IsPopOrder([1,2,3],[3,1,2]))
优秀的程序,其实思路一样的,就是更有逻辑
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
if(pushV.size() == 0) return false;
vector<int> stack;
for(int i = 0,j = 0 ;i < pushV.size();){
stack.push_back(pushV[i++]);
while(j < popV.size() && stack.back() == popV[j]){
stack.pop_back();
j++;
}
}
return stack.empty();
}
};
网友评论