Java 从整数堆栈中删除前半个元素
给您一个包含n个整数的堆栈。您需要从堆栈底部删除楼板(n/2)元素,并打印堆栈的其余元素。其余元素应按插入堆栈的顺序打印 下限(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 12345678910112 样本输出: [7,8,9,10,11,12] 样本输入: 19 12345678910111311314151717181819 样本输出: [10,11,12,13,14,15,16,17,18,19] 这里我的问题是我的代码通过了测试用例1和测试用例2,但在测试用例3中,样本输入为19,应该像上面提到的那样打印输出,但是我的输出来了[11,12,13,14,15,16,17,18,19]它省略了第10个元素,我不知道我的错误在哪里。所以请在这方面帮助我 我的代码-Java 从整数堆栈中删除前半个元素,java,stack,Java,Stack,给您一个包含n个整数的堆栈。您需要从堆栈底部删除楼板(n/2)元素,并打印堆栈的其余元素。其余元素应按插入堆栈的顺序打印 下限(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
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);
}
}
}
import java.util.*;
公共类删除元素{
公共静态void main(字符串参数[]){
堆栈=新堆栈();
扫描仪s=新的扫描仪(System.in);
int n=s.nextInt();
而(n-->0)
stack.push(s.nextInt());
deleteFirstHalf(stack,stack.size(),0);
System.out.println(堆栈);
}
静态void deleteFirstHalf(堆栈,int n,int curr){
if(stack.empty()| curr==n){
返回;
}
intx=stack.pop();
删除上半部分(堆栈,n,当前+1);
如果(curr您的bug来自这样一个事实:您应该删除底部楼层(n/2)
元素,但是您保留了顶部楼层(n/2)
elements。它对某些测试用例有效的原因是,当n为偶数时,保留顶部的n/2元素与删除底部的n/2元素相同。当n为奇数时,代码应保留一个额外的元素
解决方案是将if(curr
更改为if(curr
。首先,您可以删除Math.floor()
,因为整数除法无论如何都会进行楼层除法。关键的区别在于,当n为偶数时,添加n%2
n%2
计算结果为0,当n为奇数时,计算结果为1。如果n为奇数,则会使代码保留一个额外的元素。(在第三个测试用例中,它将保留10,而不是删除它)如果n是偶数,n%2
的计算结果为0,因此算法的行为与以前相同。而不是curr Math.floor(n/2)没有,我尝试过你的方法,但如果我使用此方法,则我的测试用例1和2失败,请尝试@a。deshpande012@soumyaranjantripathy你说得对,我漏掉了一个错误。检查更新的答案。