LeetCode刷题21-连续出牌数量

 

package exam;

import java.util.*;

public class Main04 {
    /*
    说明
    如果打(1, r)-> (5, r),那么能打两张。
    如果打(4,y) -> (4, b) -> (3, b),那么能打三张。

    思路分析
    这道题还可以考虑BFS,相同数字或者相同颜色的都存入连续关系。
    从第一个进如队列,统计每一个对应的最大次数,最后再更新最大值。
    存入连续关系得时候可以使用二维list
    以序号为索引,判断元素相同或颜色相同的都加入相应的list。
    然后就是常规的BFS入队进行处理。
    参考代码
    */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 数字
        String[] str1 = in.nextLine().split(" ");
        // 颜色
        String[] str2 = in.nextLine().split(" ");
        String[][] arr = new String[str1.length][2];
        // 2维数组存卡牌 存的代表列0-数字 列1-颜色
        for (int i = 0; i < str1.length; i++) {
            arr[i][0] = str1[i];
            arr[i][1] = str2[i];
        }
        // 存储相等关系
        List<List<Integer>> list = new ArrayList<>(arr.length);
        for (int i = 0; i < arr.length; i++) {  // 初始化
            list.add(new ArrayList<>());
        }
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (i != j) {
                    if (arr[i][0].equals(arr[j][0]) || arr[i][1].equals(arr[j][1])) {
                        list.get(i).add(j);
                    }
                }
            }
        }
        // BFS
        Queue<Integer> queue = new ArrayDeque<>();
        Queue<Integer> visited = new ArrayDeque<>();  // 用于判断是否访问过
        int[] res = new int[arr.length];
        Arrays.fill(res, 1);
        queue.add(0);
        while (!queue.isEmpty()) {
            int poll = queue.poll();
            for (int node : list.get(poll)) {
                if (!visited.contains(node)) {
                    visited.add(node);
                    res[node] = res[poll] + 1;
                    queue.add(node);
                }
            }
        }
        int ans = 0;
        for (int i = 0; i < arr.length; i++) {
            ans = Math.max(ans, res[i]);
        }
        System.out.println(ans);

    }

}

 

posted @ 2022-08-08 00:23  chch213  阅读(420)  评论(1编辑  收藏  举报