独木桥 Java
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int l = sc.nextInt();int n = sc.nextInt();// 没有士兵的情况if (n == 0) {System.out.println("0 0");return;}// 都初始化为最小值,因为要求最长的时间,也就是最后一个士兵离开时的时间int minTime = Integer.MIN_VALUE, maxTime = Integer.MIN_VALUE;for (int i = 1; i <= n; i++) {int x = sc.nextInt();int left = x, right = l - x + 1; // 每个士兵向左和向右走的路程minTime = Math.max(minTime, Math.min(left, right));maxTime = Math.max(maxTime, Math.max(left, right));}System.out.println(minTime + " " + maxTime);}
}
每两个士兵相遇都回头,换个角度想,其实可以想象成两个士兵无视对方直接穿过去了,这样就变得很简单了。只要遍历每个士兵,求出他们每个人选择向左或向右走时,哪个方向路程最大(最小),然后求出最后一个士兵离开时的时间,就是离开独木桥的最大(最小)时间了。