题解 | #交叉线#

交叉线

https://www.nowcoder.com/practice/54fe00d9b0e14688bd3d31ad539b929c

思路:将所有圆的左右端点存入集中,然后两两去判断是否相交,只要有相交的就返回“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");
            }
        }
    }
}

全部评论

相关推荐

想润的芹菜人狠话不多:把其中一个老总放中间都会得罪另一个
点赞 评论 收藏
分享
jack_miller:杜:你不用我那你就用我的美赞臣
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务