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); } }
本文来自博客园,作者:chch213,转载请注明原文链接:https://www.cnblogs.com/chch213/p/16560344.html
分类:
LeetCode
标签:
java
, LeetCode刷题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)