思路:将所有圆的左右端点存入集中,然后两两去判断是否相交,只要有相交的就返回“y”

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        while (T-- > 0) {
            // 端点数
            int n = in.nextInt();
            int[] arr = new int[n];
            // 输入端点
            for (int i = 0; i < n; i++) {
                arr[i] = in.nextInt();
            }
            // 使用集合来保存圆,再去判断是否相交,如果是,则返回F
            List<int[]> cir = new ArrayList<>();
            // 存储圆
            for (int i = 0; i < n - 1; i++) {
                // 左
                int left = Math.min(arr[i], arr[i + 1]);
                // 右
                int right = Math.max(arr[i], arr[i + 1]);
                cir.add(new int[] {left, right});
            }

            // 判断是否相交
            boolean flag = false;
            for (int i = 1; i < cir.size(); i++) {
                for (int j = 0; j < i; j++) {
                    // 设置两个圆的端点
                    int left1 = cir.get(i)[0], right1 = cir.get(i)[1];
                    int left2 = cir.get(j)[0], right2 = cir.get(j)[1];
                    // 两个圆相交的情况
                    if (left1 < left2 && right1 < right2 && right1 > left2) {
                        flag = true;
                        break;
                    } else if (left1 > left2 && left1 < right2 && right1 > right2) {
                        flag = true;
                        break;
                    }
                }
            }
            if (flag) {
                System.out.println("y");
            } else {
                System.out.println("n");
            }
        }
    }
}