相同的逻辑适用于c ++,但不适用于python以获得堆栈中的最大值,我的代码中是不是缺少某些东西

Posted

技术标签:

【中文标题】相同的逻辑适用于c ++,但不适用于python以获得堆栈中的最大值,我的代码中是不是缺少某些东西【英文标题】:Same logic is working for c++ but not in python for maximum in stack,is there something that i am missing in my code相同的逻辑适用于c ++,但不适用于python以获得堆栈中的最大值,我的代码中是否缺少某些东西 【发布时间】:2019-08-14 07:32:55 【问题描述】:

我在 python 和 c++ 中编写了相同的逻辑,以使用两个堆栈在 O(1) 时间内返回堆栈中的最大元素。但是当我在hackerrank上提交它时,它显示了python的错误答案但接受了c++。 我在 python 中遗漏了什么吗?

#include <bits/stdc++.h>
using namespace std;
int main() 
    int n,q,x;
    stack<int>s1,s2;
    cin>>n;
    for(int i = 0;i<n;i++)
    
        cin>>q;//here q is a type of query
        switch(q)
        
            //push in stack
            case 1:
                cin>>x;
                if (s1.empty())
                
                  s2.push(x);
                
                else 
                
                  if (x >= s2.top())
                  
                    s2.push(x);
                  
                
                s1.push(x);
                break;
            //pop from stack
            case 2:
                 if(!s1.empty())
                
                    if(s1.top()==s2.top())
                    
                        s2.pop();
                    
                    s1.pop();
                
                break;
            //getMax from stack
            case 3:
                if(!s2.empty())
                    cout<<s2.top()<<endl;
        
       
    return 0;

stack1 = stack2 = []
N = int(input())
for i in range(N):
    a = list(map(int,input().rstrip().split()))
    if a[0]==1:
        if stack1 == []:
            stack2.append(a[1])
        elif a[1]>=stack2[-1]:
            stack2.append(a[1])
        stack1.append(a[1])
    elif a[0]==2:
        if stack1 != []:
            if stack1[-1] == stack2[-1]:
                stack2.pop()
            stack1.pop()
    elif a[0] == 3:
        if stack2 != []:
            print(stack2[-1])

在我看来是一样的。

我在其他在线编译器上尝试了一些我自己的测试用例,它们对两者的工作方式相同。 我是否应该在 python 中使用队列模块中的 LIFO,但到目前为止我在使用列表作为堆栈之前还没有遇到任何问题。

它们对于所有测试用例都应该同样工作。

【问题讨论】:

【参考方案1】:

你只有1个python“堆栈”:

stack1 = stack2 = []     # two names that point to the same list

print(id(stack1))
print(id(stack2))

# vs

stack1 = []              # points to one list
stack2 = []              # points to another list

print(id(stack1))
print(id(stack2))

输出:

139948335562312
139948335562312

# vs

139948335067208
139948335562696

【讨论】:

是的,谢谢,我不知道我怎么错过了那个基本的东西。嘘

以上是关于相同的逻辑适用于c ++,但不适用于python以获得堆栈中的最大值,我的代码中是不是缺少某些东西的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow 模型适用于 Python,但不适用于 C++

自定义授权适用于操作级别,但不适用于控制器级别

用于 DynamoDB 查询的 Python 代码适用于 v3.6,但不适用于 python 2.7

自动旋转代码适用于 iPhone 但不适用于 iPad

所有机器上的 Grep“-C”命令

我使用 pyinstaller 创建的 .exe 文件适用于 Windows 10,但不适用于 Windows 7