技巧:
双指针 + 环形队列
思路:
枚举每个小朋友的距离 (两人最远距离肯定是在总距离一半的附近位置)
实现:
package main import ( "fmt" "math" ) func main() { var n int fmt.Scan(&n) total := 0 arr := make([]int, n) for i := 0; i < n; i++ { fmt.Scan(&arr[i]) total += arr[i] } ans := 0 i, j := 0, 1 sum := arr[0] for i != n - 1 { for (sum << 1) < total { sum += arr[j] j = (j + 1) % n } ans = int(math.Max(float64(total - sum), float64(ans))) sum -= arr[i] i = (i + 1) % n } fmt.Println(ans) }