ToB企服应用市场:ToB评测及商务社交产业平台

标题: hot100 | 九、图论 [打印本页]

作者: 金歌    时间: 2024-7-16 12:41
标题: hot100 | 九、图论
1-leetcode200. 岛屿数目

注意:×
  1.     public int numIslands(char[][] grid) {
  2.         int res = 0;
  3.         int n = grid.length;;
  4.         int m = grid[0].length;
  5.         for (int i = 0; i < n; i++) {
  6.             for (int j = 0; j < m; j++) {
  7.                 if (grid[i][j] == '1'){
  8.                     res++;
  9.                     dfs(grid, i, j);
  10.                 }
  11.             }
  12.         }
  13.         return res;
  14.     }
  15.     private void dfs(char[][] grid, int i, int j) {
  16.         if (i<0 || i>=grid.length || j<0 || j>=grid[0].length){
  17.             return;
  18.         }
  19.         if (grid[i][j] == '0'){
  20.             return;
  21.         }
  22.         grid[i][j] = '0';
  23.         dfs(grid, i+1, j);
  24.         dfs(grid, i, j+1);
  25.         dfs(grid, i-1, j);
  26.         dfs(grid, i, j-1);
  27.     }
复制代码
leetcode994. 腐烂的橘子

注意:×
  1. [/code] [size=5]3-leetcode207. 课程表[/size]
  2. 注意:××
  3. [list=1]
  4. [*]花了许多时间,注意的地方太多了
  5. [*]创建List<Integer>[] graph的时候,Labuladong说写代码的时候大部分都是这种连接表的格式,先创建一个LinkedList类型的数组,然后一定要注意,是graph[i] = new LinkedList<>();
  6. [*]第二个注意的地方是有hasVisited和onPath两种记录,onPath的记录我能明确,hasVisited的记录还需要思索一下,主要的目的就是办理重复搜索
  7. [/list] [code]
  8.     boolean hasCycle = false;
  9.     boolean[] hasVisited;
  10.     boolean[] onPath;
  11.     public boolean canFinish(int numCourses, int[][] prerequisites) {
  12.         List<Integer>[] graph = buildGraph(numCourses, prerequisites);
  13.         hasVisited = new boolean[numCourses];
  14.         onPath = new boolean[numCourses];
  15.         for (int i = 0; i < numCourses; i++) {
  16.             traverse(graph, i);
  17.         }
  18.         return !hasCycle;
  19.     }
  20.     private void traverse(List<Integer>[] graph, int i) {
  21.         if (onPath[i]){
  22.             hasCycle = true;
  23.         }
  24.         if (hasCycle || hasVisited[i]){
  25.             return;
  26.         }
  27.         
  28.         hasVisited[i] = true;
  29.         
  30.         onPath[i] = true;
  31.         for (Integer integer : graph[i]) {
  32.             traverse(graph, integer);
  33.         }
  34.         
  35.         onPath[i] = false;
  36.     }
  37.     private List<Integer>[] buildGraph(int numCourses, int[][] prerequisites) {
  38.         List<Integer>[] graph = new LinkedList[numCourses];
  39.         for (int i = 0; i < graph.length; i++) {
  40.             graph[i] = new LinkedList<>();
  41.         }
  42.         for (int[] prerequisite : prerequisites) {
  43.             int from = prerequisite[1];
  44.             int to = prerequisite[0];
  45.             graph[from].add(to);
  46.         }
  47.         return graph;
  48.     }
复制代码
4-leetcode208. 实现 Trie (前缀树)

注意:×
  1.     class Trie {
  2.         class TrieNode{
  3.             boolean isEnd;
  4.             TrieNode[] nodes;
  5.             public TrieNode(){
  6.                 isEnd = false;
  7.                 nodes = new TrieNode[26];
  8.             }
  9.         }
  10.         private TrieNode root;
  11.         public Trie() {
  12.             root = new TrieNode();
  13.         }
  14.         public void insert(String word) {
  15.             TrieNode node = root;
  16.             for (char c : word.toCharArray()) {
  17.                 if (node.nodes[c-'a'] == null){
  18.                     node.nodes[c-'a'] = new TrieNode();
  19.                 }
  20.                 node = node.nodes[c-'a'];
  21.             }
  22.             node.isEnd = true;
  23.         }
  24.         public boolean search(String word) {
  25.             TrieNode node = root;
  26.             for (char c : word.toCharArray()) {
  27.                 if (node.nodes[c-'a'] == null){
  28.                     return false;
  29.                 }
  30.                 node = node.nodes[c-'a'];
  31.             }
  32.             return node.isEnd;
  33.         }
  34.         public boolean startsWith(String prefix) {
  35.             TrieNode node = root;
  36.             for (char c : prefix.toCharArray()) {
  37.                 if (node.nodes[c-'a'] == null){
  38.                     return false;
  39.                 }
  40.                 node = node.nodes[c-'a'];
  41.             }
  42.             return true;
  43.         }
  44.     }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4