获取题库不需要订阅专栏,可直接私信我进入优快云领军人物top1博主的华为OD交流圈观看完整题库、最新面试实况、考试报告等内容以及大佬一对一答疑。
题目描述
向一个空栈中依次存入正整数,假设入栈元素 n(1<=n<=2^31-1)按顺序依次为 nx…n4、 n3、n2、 n1, 每当元素入栈时,如果 n1=n2+…+ny(y 的范围[2,x], 1<=x<=1000),则 n1~ny 全部元素出栈,重新入栈新元素 m(m=2*n1)。
如:依次向栈存入 6、 1、 2、 3, 当存入 6、 1、 2 时,栈底至栈顶依次为[6、 1、 2];当存入 3时, 3=2+1, 3、 2、 1 全部出栈,重新入栈元素 6(6=2*3),此时栈中有元素 6;
因为 6=6,所以两个 6 全部出栈,存入 12,最终栈中只剩一个元素 12。
输入描述
使用单个空格隔开的正整数的字符串,如”5 6 7 8″, 左边的数字先入栈,输入的正整数个数为 x, 1<=x<=1000。
输出描述
最终栈中存留的元素值,元素值使用空格隔开,如”8 7 6 5″, 栈顶数字在左边。 6 1 2 3
题目解析
题目要求模拟一个栈的入栈和出栈操作。特别地,每当新元素入栈时,如果栈顶的几个元素(至少两个)之和等于新元素,则这些元素(包括新元素)需要出栈,并将这些元素之和的两倍作为一个新元素重新入栈。我们需要记录每次操作后栈中的元素,并在所有元素都处理完后,输出栈中最终留下的元素
本文介绍了一道华为在线开发者(OD)面试题,涉及使用堆栈模拟特定入栈出栈规则的问题。当栈中元素之和等于新入栈元素时,所有这些元素出栈并以它们两倍的和重新入栈。提供了Java、Python和JavaScript的解题代码,并解释了算法思路。
订阅专栏 解锁全文
1335





