猿问

给定堆栈中的最大可能顶部(日产面试问题)

问题


给你一堆N整数。在一次操作中,您可以从堆栈中弹出一个元素,也可以将任何弹出的元素推入堆栈。在执行精确操作后,您需要最大化堆栈顶部的元素K。如果执行操作后堆栈变空K,并且没有其他方法使堆栈不为空,则打印 -1。


输入格式:


输入的第一行由两个空格分隔的整数N和组成K。输入的第二行由N空格分隔的整数组成,表示堆栈的元素。第一个元素代表栈顶,最后一个元素代表栈底。


输出格式:


执行精确操作后打印堆栈的最大可能顶部元素K。


输入:


6 4

1 2 4 3 3 5

预期输出:


4

预期输出的说明:


在 3 个操作中,我们删除1, 2, 4,在第四个操作中,我们推4回堆栈。因此,4就是答案。


我的代码:


 def stack_operations(list1, k):

    stack = []

    list1.reverse()

    for number in list1:

        stack.append(number) 

    if k == len(list1) or len(list1) == 1:

        print("-1")

    elif k > len(list1):

        print(max(list1))

    else:

        list2 = []

        for i in range(k - 1):

            list2.append(stack.pop())

        max_element = max(list2)

        print(max_element)


n, k = map(int, input().split())

num = list(map(int, input().split()))

stack_operations(num, k)

我的疑问:


我的代码适用于示例输入/输出,但它显示所有其他测试用例的运行时错误。我在这里做错了什么?是逻辑错误还是代码错误?问题出在哪里?


慕的地6264312
浏览 127回答 2
2回答

翻翻过去那场雪

我认为你的解决方案过于复杂化了。我不想尝试调试代码,而是想提出一种完全不同的思考问题的方式,这有望产生单行分析解决方案。解读1在这个版本中,我假设您只能推回最后弹出的元素。假设问题中有堆栈,存储在 list 中s:s&nbsp;=&nbsp;[1,&nbsp;2,&nbsp;4,&nbsp;3,&nbsp;3,&nbsp;5]如果k = 4,则答案很简单:pop 3,replace 1。这种琐碎的重要之处在于,它向您表明,除非下一个元素大于 中的所有内容,否则s[:k - 1]您必须将自己限制在第一个k - 1元素。但您也无法访问所有这些。例如:s&nbsp;=&nbsp;[1,&nbsp;5,&nbsp;4,&nbsp;3,&nbsp;3,&nbsp;5]如果出现以下情况,则无法到达5堆栈顶部k = 4:每次获取和替换都是两个操作。因此,这意味着您只能访问最多 的所有其他元素k - 1。换句话说,对于k=4,您可以从x以下标记的元素中进行选择:s&nbsp;=&nbsp;[x,&nbsp;.,&nbsp;x,&nbsp;.,&nbsp;x,&nbsp;.,&nbsp;.,&nbsp;.,&nbsp;...]对于k=5,域如下所示:s&nbsp;=&nbsp;[.,&nbsp;x,&nbsp;.,&nbsp;x,&nbsp;.,&nbsp;x,&nbsp;.,&nbsp;.,&nbsp;.,&nbsp;...]希望这种模式相当明显:solution&nbsp;=&nbsp;max(s[k&nbsp;%&nbsp;2:k&nbsp;+&nbsp;1:2])解读2在此版本中,我假设您可以推回弹出的任何项目。再看看k=4和s&nbsp;=&nbsp;[1,&nbsp;2,&nbsp;4,&nbsp;3,&nbsp;3,&nbsp;5]1, 2, 4您可以在前三个 ( ) 操作中弹出k - 1。第四个操作可以是替换其中一项或公开k + 1st 元素。所以你可以访问第一个k - 1元素和 st&nbsp;k + 1,但不能访问kth:solution&nbsp;=&nbsp;max(max(s[:k&nbsp;-&nbsp;1]),&nbsp;s[k])笔记在这两种情况下,处理k < n都留给读者作为练习。例如,如果n == 1,只有当 时才有解k % 2 == 0,等等。

RISEBY

我无法创建评论(抱歉),但“n”未定义。除非当您检查“n == 1”时缺少代码,否则会引发错误。
随时随地看视频慕课网APP

相关分类

Python
我要回答