完全执行K次操作后,最大化堆栈的顶部元素

时间:2018-08-05 07:25:39

标签: arrays algorithm data-structures stack

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

输入格式:

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

输出格式:

完全执行K次操作后,打印堆栈的最大可能顶部元素。

样本输入

6 4

1 2 4 3 3 5

样本输出

4

3 个答案:

答案 0 :(得分:1)

在k-1个操作中弹出k-1个元素。现在,对于最后一个操作,您可以再弹出一个元素,或者可以从弹出的元素中推送一个元素。

因此,将这两种情况进行比较,如果在第k个操作中弹出元素,则顶部元素应大于所有前k-1个弹出元素,否则,对于第k个操作,请从k-1个弹出元素中推入最大元素。

答案 1 :(得分:0)

我没有足够的声誉,因此添加答案。
1。 对于k> n来说,答案不是强制性的,因为给定的例子是最大的数字:

3 5
1 2 3
K = 5,在第一个操作中,我们弹出1,然后弹出2,
现在我们有K = 3,并且堆栈元素的顶部是3
流行音乐3,K = 2,
推3,K = 1,堆栈元素的顶部= 3
因此,如果我们在这里弹出3,则K = 0且堆栈为空,根据问题陈述的答案将为-1,这是错误的。
回到K = 3且st.top()= 3且弹出元素为1,2的情况。
推2,K = 2
流行音乐2,K = 1
推2,K = 0
答案,即5次运算后最大元素为2。

2。对于n = 1,如果K的值为奇数,则答案将为-1,否则它将是第一个元素

答案 2 :(得分:0)

python3代码:

n,k = [int(x) for x in input().split()]
arr = [int(x) for x in input().split()]
if n == 1:
    if k%2 == 1:
        print(-1)
    else:
        print(arr[0])
elif k >= n:
    print(max(arr))
else:
    print(max(arr[k-2],arr[k]))