Java 从整数堆栈中删除前半个元素

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

给您一个包含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个元素,我不知道我的错误在哪里。所以请在这方面帮助我

我的代码-

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你说得对,我漏掉了一个错误。检查更新的答案。