当前位置: 首页 > news >正文

力扣-图论-9【算法学习day.59】

前言

###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.新增道路查询后的最短距离I

题目链接:3243. 新增道路查询后的最短距离 I - 力扣(LeetCode)

题面:

分析:bfs

贴上大佬代码: 

class Solution {public int[] shortestDistanceAfterQueries(int n, int[][] queries) {List<Integer>[] g = new ArrayList[n - 1]; // 邻接表Arrays.setAll(g, i -> new ArrayList<>()); // 初始化邻接表for (int i = 0; i < n - 1; i++) { // 构建初始图g[i].add(i + 1);}int[] ans = new int[queries.length]; // 结果数组int[] vis = new int[n - 1]; // 访问标记数组for (int i = 0; i < queries.length; i++) { // 处理每个查询g[queries[i][0]].add(queries[i][1]); // 添加边ans[i] = bfs(i + 1, g, vis, n); // 计算最短距离}return ans; // 返回结果}private int bfs(int i, List<Integer>[] g, int[] vis, int n) {Queue<Integer> q = new LinkedList<>(); // 队列q.offer(0); // 起点int step = 1; // 步数while (!q.isEmpty()) { // BFSint size = q.size();for (int j = 0; j < size; j++) {int x = q.poll();for (int y : g[x]) {if (y == n - 1) { // 到达终点return step;}if (vis[y] != i) { // 未访问vis[y] = i;q.offer(y);}}}step++;}return -1; // 无法到达}
}

2.获取你好友已观看的视频

题目链接:1311. 获取你好友已观看的视频 - 力扣(LeetCode)

大佬代码:

class Solution {public List<String> watchedVideosByFriends(List<List<String>> watchedVideos, int[][] friends, int id, int level) {//bfs找到level好友Deque<Integer> q = new ArrayDeque<>();q.addLast(id);int size = q.size();//用于记录防止重复Set<Integer> set = new HashSet<>();set.add(id);while(level>0){int i = q.pollFirst();for(int a : friends[i]){if(!set.contains(a)){set.add(a);q.addLast(a);}}size--;if(size == 0){level--;size = q.size();}}//哈希表-记录level朋友观看的视频Map<String,Integer> map = new HashMap<>();while(!q.isEmpty()){int i = q.pollFirst();for(String s : watchedVideos.get(i)){if(map.containsKey(s))map.put(s,map.get(s)+1);else map.put(s,1);}}List<String> list = new ArrayList<>(map.keySet());//排序list.sort((a,b)->{if(map.get(a) == map.get(b)){int i = 0;while(true){if(a.charAt(i) != b.charAt(i))return a.charAt(i) - b.charAt(i);else{i++;if(i>=Math.min(a.length(),b.length())){return a.length() - b.length();}}}}return map.get(a) - map.get(b);});return list;}
}

后言

上面是力扣图论专题,下一篇是其他的习题,希望有所帮助,一同进步,共勉!

http://www.lryc.cn/news/502091.html

相关文章:

  • 如何选择安全、可验证的技术?
  • Allure在自动化测试中的应用
  • C# 探险之旅:第十一节 - 循环(foreach):一场“遍历”奇幻岛的大冒险!
  • Ubuntu24.04配置STMTrack
  • 【Java学习笔记】Map接口和常用方法
  • uniapp支持App横竖屏开发总结
  • 【工作笔记】Lombok版本变化导致的反序列化异常
  • 多模态大语言模型 MLLM 部署微调实践
  • LNMP和Discuz论坛
  • Cadence学习笔记 2 PCB封装绘制
  • 网络安全——防火墙
  • 【CSS in Depth 2 精译_074】第 12 章 CSS 排版与间距概述 + 12.1 间距设置(下):行内元素的间距设置
  • 短视频矩阵抖音SEO源码OEM独立部署
  • 使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
  • 在ensp中ACL路由控制实验
  • μC/OS-Ⅱ源码学习(3)---事件模型
  • Jmeter进阶篇(30)深入探索 JMeter 监听器
  • 虚幻引擎的工程目录结构
  • 深度学习中的yield
  • 数据库数据恢复—ORACLE常见故障有哪些?如何恢复数据?
  • 使用JavaScrip和HTML搭建一个简单的博客网站系统
  • 算法-字符串-76.最小覆盖子串
  • Python爬虫之Selenium的应用
  • 粉丝生产力与开源 AI 智能名片 2+1 链动模式商城小程序的融合创新与价值拓展
  • 红黑树(Red-Black Tree)
  • Cocos 资源加载(以Json为例)
  • 解决 IntelliJ IDEA 启动错误:插件冲突处理
  • SQL——DQL分组聚合
  • Ripro V5日主题 v8.3 开心授权版 wordpress主题虚拟资源下载站首选主题模板
  • 分布式搜索引擎之elasticsearch基本使用2