fork download
  1. import java.util.*;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6.  
  7. // 读取火车数量
  8. int n = scanner.nextInt();
  9.  
  10. // 读取火车出站顺序
  11. int[] departureOrder = new int[n];
  12. for (int i = 0; i < n; i++) {
  13. departureOrder[i] = scanner.nextInt();
  14. }
  15.  
  16. // 调用方法来获取最大车站内火车数量
  17. int result = findMaxTrainsAtStation(n, departureOrder);
  18.  
  19. // 输出结果
  20. System.out.println(result);
  21. }
  22.  
  23. public static int findMaxTrainsAtStation(int n, int[] departureOrder) {
  24. // 使用栈来模拟车站
  25. Stack<Integer> stack = new Stack<>();
  26. int currentTrain = 1; // 当前到达的火车
  27. int maxTrains = 0; // 用来记录栈的最大大小
  28.  
  29. // 遍历每一个出站的火车
  30. for (int i = 0; i < n; i++) {
  31. // 将火车推入栈中,直到栈顶是当前应该出站的火车
  32. while (currentTrain <= n && (stack.isEmpty() || stack.peek() != departureOrder[i])) {
  33. stack.push(currentTrain++);
  34. }
  35.  
  36. // 检查栈顶的火车是否是当前应该出站的火车
  37. if (!stack.isEmpty() && stack.peek() == departureOrder[i]) {
  38. stack.pop(); // 出站
  39. } else {
  40. // 如果栈顶不是当前应该出站的火车,说明顺序不对,返回 -1
  41. return -1;
  42. }
  43.  
  44. // 更新车站内最大火车数量
  45. maxTrains = Math.max(maxTrains, stack.size());
  46. }
  47.  
  48. return maxTrains;
  49. }
  50. }
  51.  
Success #stdin #stdout 0.18s 54556KB
stdin
5
1 3 5 2 4
stdout
-1