ARTS-2

ARTS是由左耳朵耗子陈皓在极客时间专栏《左耳听风》中发起的一个每周学习打卡计划。

1
2
3
4
5
6
7
Algorithm:至少做一个 LeetCode 的算法题。主要为了编程训练和学习。

Review :阅读并点评至少一篇英文技术文章。主要为了学习英文,如果你英文不行,很难成为技术高手。

Tip:学习至少一个技术技巧。主要是为了总结和归纳你日常工作中所遇到的知识点。

Share:分享一篇有观点和思考的技术文章。主要为了输出你的影响力,能够输出你的价值观。

Algorithm(算法)

参考文章和视频:

https://www.youtube.com/watch?v=_Zt6gwWRnHM

https://leetcode-cn.com/problems/clone-graph/solution/dfs-he-bfs-by-powcai/

https://www.youtube.com/watch?v=MOCCC_B3kNg

Leetcode 133 克隆图

这道题就是遍历整个图,所以遍历时候要记录已经访问点, 我们用一个字典记录

所以,遍历方法就有两种

思路一:DFS(深度遍历)

思路二:BFS(广度遍历)

方法一:DFS(深度遍历)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Solution {

// 定义一个辅助hash表,用于存储原节点和拷贝节点的映射关系
private Map<Node, Node> lookup = new HashMap<>();

public Node cloneGraph(Node node) {
// 如果node节点本身为null,直接返回null。
if (node == null) return null;
// 如果相邻节点存在于Hash表中,把相应的相邻节点取出,作为当前节点的相邻节点
if (lookup.containsKey(node)) return lookup.get(node);
// 克隆节点
Node clone = new Node(node.val, new ArrayList<>());
// 原结点和映射关系存储到hash表
lookup.put(node, clone);
// 处理相邻节点,dfs(n,lookup)进行深度优先处理,克隆后的Node加到neighbors
for (Node n : node.neighbors) clone.neighbors.add(cloneGraph(n));
// 最后返回拷贝节点
return clone;
}
}

方法一:BFS(广度遍历)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class Solution {

/*
map 存储原节点和复制节点的关系
queue 存储节点
*/
public Node cloneGraph(Node node) {
// 如果node节点本身为null,直接返回null。
if (node == null) return null;
// 定义HashMap用于查找复制的node
Map<Node, Node> lookup = new HashMap<>();
// 复制的node
Node clone = new Node(node.val, new ArrayList<>());
// 存储原节点和克隆节点的映射关系
lookup.put(node, clone);
Deque<Node> queue = new LinkedList<>();
queue.offer(node);
while (!queue.isEmpty()) {
Node tmp = queue.poll();
for (Node n : tmp.neighbors) {
// map里面有从map里取出, 没有就put到map中去
if (!lookup.containsKey(n)) {
lookup.put(n, new Node(n.val, new ArrayList<>()));
// node存入queue
queue.offer(n);
}
// 给tmp的neighbors添加克隆节点
lookup.get(tmp).neighbors.add(lookup.get(n));
}
}
// 返回克隆节点
return clone;
}
}

Review(点评)

5个软件开发人员的不良习惯

  1. 没有代码结构和代码风格
  2. 盲目复制粘贴代码
  3. 晚上熬夜
  4. 缺乏文档
  5. 编写代码而不进行测试

Tip(技巧)

Intellij Idea 导入多个maven项目展示在右侧栏Maven Projects

Share(分享)

算法教学视频推荐

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2023 高行行
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信