一、问题描述
题目解析
题目描述
在一个荒岛上,有若干人需要逃生。岛上只有一条路通往岛屿两端的港口,大家需要逃往两端的港口才能逃生。每个人移动的速度相同,且只能选择向左或向右逃生。如果两个人相遇,则会进行决斗,战斗力强的人能够活下来,并损失与对方相同的战斗力;如果战斗力相同,则两人同归于尽。
输入描述
输入为一组非零整数数组,元素个数不超过30000。正数表示向右逃生,负数表示向左逃生,绝对值表示战斗力。数组中的位置越靠左,表示离左边港口越近。逃生方向相同的人永远不会发生决斗。
输出描述
输出能够逃生的人数。如果没有人逃生,则输出0;如果输入异常,则输出-1。
解题思路
本题可以使用栈结构来解决。解题思路如下:
-
假设所有数字都向左逃生:在这种情况下,从左边出来的只有两种可能:正数或负数。
-
处理正数:
- 如果左边出来的是正数,由于正数不能从左边逃生(只能从右边逃生),因此这个正数不能算作逃生成功。