【发布时间】:2021-01-05 02:25:03
【问题描述】:
给你一个包含 n 个整数的栈。您需要从堆栈底部删除 floor(n/2) 个元素并打印堆栈的剩余元素。其余元素应按插入堆栈的顺序打印。
floor(3.5) 将输出为 3,最大整数小于或等于输入。 输入格式: 输入的第一行是一个整数 n,表示堆栈的大小。下一行包含 n 个空格分隔的整数。 输出格式: 移除所需元素后堆栈的剩余元素。 例子: 堆栈(底部 -> 顶部)= [1, 2, 3, 4, 5, 6] 输出:[4,5,6]
堆栈 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 输出:[6, 7, 8, 9, 10, 11]
示例输入: 12 1 2 3 4 5 6 7 8 9 10 11 12
样本输出: [7、8、9、10、11、12]
示例输入: 19 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
样本输出: [10、11、12、13、14、15、16、17、18、19]
我的问题是我的代码通过了测试用例 1 和测试用例 2,但在测试用例 3 中,样本输入为 19 应该打印如上所述的输出,但我的输出来自 [11、12、13、14、15 , 16, 17, 18, 19] 它省略了第 10 个元素,我不知道我的错误在哪里。所以请在这方面帮助我
我的代码 -
import java.util.*;
public class DeleteElement {
public static void main(String args[]) {
Stack<Integer> stack = new Stack<>();
Scanner s = new Scanner(System.in);
int n = s.nextInt();
while (n-- > 0)
stack.push(s.nextInt());
deleteFirstHalf(stack, stack.size(), 0);
System.out.println(stack);
}
static void deleteFirstHalf(Stack<Integer> stack, int n, int curr) {
if(stack.empty() || curr == n) {
return;
}
int x = stack.pop();
deleteFirstHalf(stack, n, curr+1);
if(curr<Math.floor(n/2)){
stack.push(x);
}
}
}
注意 - 不要更改我的代码中的 main()。
【问题讨论】: