题意
一个荒岛上有若干人,岛上只有一条路通往岛屿两端的港口,大家需要逃往两端的港口才可逃生。
假定每个人移动的速度一样,且只可选择向左或向右逃生。
若两个人相遇,则进行决斗,战斗力强的能够活下来,并损失掉与对方相同的战斗力;若战斗力相同,则两人同归于尽。
输入
给定一行非0整数数组,元素个数不超过30000;
正负表示逃生方向(正表示向右逃生,负表示向左逃生),绝对值表示战斗力,越左边的数字表示只里左边港口越近,逃生方向相同的人永远不会发生决斗。
输出
能够逃生的人总数,没有人逃生输出0,输入异常时输出-1。
示例
示例1
输入 | 5 10 8 -8 -5 |
输出 | 2 |
说明 | 第3个人和第4个人同归于尽,第二个人杀死第5个人并剩余5战斗力,第一个人没有遇到敌人 |
题目解析
跟小行星碰撞一样,用栈模拟,把人当作物体的话
- 使用一个栈来存储正向移动的物体(正数)。栈顶始终存放最近进入栈的物体。
- 遍历数组,当遇到正数时,将其直接压入栈中;当遇到负数时,检查栈顶元素(最近的正向物体):
- 如果栈为空,
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 华为OD机试-荒岛求生游戏(Java&Python&C++)100%通过率,最新E卷题目
发表评论 取消回复