计算堆栈中的剩余数字

更多关于刷题的内容欢迎订阅我的专栏华为刷题笔记

该专栏题目包含两部分:

100 分值部分题目

200 分值部分题目

所有题目都会陆续更新,订阅防丢失

题目描述:

向一个空栈中依次存入正整数,

假设入栈元素 n ( 1 < = n < = 2 3 1 − 1 ) n(1<=n<=2^31-1) n(1<=n<=231−1)按顺序依次为 n x . . . n 4 、 n 3 、 n 2 、 n 1 nx...n4、n3、n2、n1 nx...n4、n3、n2、n1,

每当元素入栈时,如果 n 1 = n 2 + . . . + n y n1=n2+...+ny n1=n2+...+ny ( y y y的范围 2 , x 2,x 2,x, 1 < = x < = 1000 1<=x<=1000 1<=x<=1000 ),则 n 1 n y n1~ny n1 ny 全部元素出栈,重新入栈新元素 m ( m = 2 ∗ n 1 ) m(m=2*n1) 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 x,1<=x<=1000 x,1<=x<=1000。

输出描述:

最终栈中存留的元素值,元素值使用空格隔开,如"8 7 6 5", 栈顶数字在左边。

示例1

输入:

复制代码
5 10 20 50 85 1

输出:

复制代码
1 170

说明:

5+10+20+50=85, 输入85时,5、10、20、50、85全部出栈,入栈170,最终依次出栈的数字为1和170。

示例2

输入:

复制代码
6 7 8 13 9

输出:

复制代码
9 13 8 7 6

说明:

示例3

输入:

复制代码
1 2 5 7 9 1 2 2

输出:

复制代码
4 1 9 14 1

题解

使用 list 模拟栈的操作

源码 Java

java 复制代码
public class StackEnter {

	static List<Integer> list = new ArrayList<>();

	static Input input;
	static {
		input = new Input("5 10 20 50 85 1");
		input = new Input("6 7 8 13 9");
	}

	public static void main(String[] args) {
		String[] split = input.nextLine().split(" ");
		for (int i = 0; i < split.length; i++) {
			push(Integer.parseInt(split[i]));
		}
		Integer pop = pop();
		StringBuilder builder = new StringBuilder();
		while (pop != null) {
			builder.append(pop).append(" ");
			pop = pop();
		}
		System.out.println(builder.toString().trim());
	}

	public static void push(Integer value){
		int sum = 0;
		for (int i = list.size() - 1; i >= 0; i--) {
			sum += list.get(i);
			if (sum == value) {
				break;
			} else if (sum > value) {
				break;
			}
		}
		if (sum == value) {
			while (sum > 0) {
				Integer pop = pop();
				sum -= pop;
			}
			value = value * 2;
		}
		list.add(value);
	}

	public static Integer pop(){
		if (list.isEmpty()){
			return null;
		}
		return list.remove(list.size()-1);
	}

}
相关推荐
AC赳赳老秦3 分钟前
企业级合规审计体系:用 OpenClaw 落地采集全链路留痕,自动生成合规审计报告
java·python·django·beautifulsoup·php·deepseek·openclaw
吃杠碰小鸡1 小时前
VsCode中开发Java项目
java·vscode
宠友信息1 小时前
内容社区源码开发实践解析,用Spring Boot打造1:1仿小红书源码平台
java·spring boot·redis·websocket·mysql·spring·uni-app
行百里er1 小时前
加个依赖就生效?一行搞定 Spring Boot Starter 自动装配
java·后端·监控
月华路2 小时前
G1 新生代对象晋升老年代:实现机制与 GC 日志
java·jvm·算法
万法若空2 小时前
排列组合恒等式
c++·算法
AI人工智能+电脑小能手2 小时前
大白话说Java设计模式-34-命令模式(业务实战篇)
java·spring·设计模式·命令模式·异步任务·撤销重做·事务封装
Nil2082 小时前
leetcode 105从前序和中序遍历序列构造二叉树
算法·leetcode·职场和发展
净重21克2 小时前
万字长文!TLS协议升级避坑手册:JDK老项目适配TLS1.2/1.3全流程拆解
java·springboot·java安全
一直C2 小时前
【数据结构】哈希表+算法复杂度与经典排序查找(C语言)
java·linux·开发语言·数据结构·算法·ubuntu·散列表