C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了相同的逻辑适用于c但不能在python中最大化堆栈,我的代码中是否存在某些内容大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 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个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中最大化堆栈,我的代码中是否存在某些内容全部内容,希望文章能够帮你解决相同的逻辑适用于c但不能在python中最大化堆栈,我的代码中是否存在某些内容所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。