博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
133. Clone Graph
阅读量:4980 次
发布时间:2019-06-12

本文共 2411 字,大约阅读时间需要 8 分钟。

July-03-2019

这个题比较诡异。题里说的unique是指任何VAL是1的点其实都是指向1个。

做法是先走一遍,记录所有的已经存在的node: Node[100]。
复制一遍记录的所有Node,此时复制的只有里面的val,复制出的copyNode的neighbor还没做好,也就是说复制出来的copyNodes之间的指向关系还没建立好。
然后走一遍复制过的所有copyNodes,通过copyNode.val来找到对应的node,然后把node里的所有neighbor加到copyNode的neighbor里:比如neighbor-3要加在copyNode里的是copy[3]
有点绕= =

class Solution {    public Node cloneGraph(Node node) {        if (node == null) return null;        Node[] nodes = fillNodes(node);        Node[] copies = new Node[101];        for (int i = 0; i < 101; i ++) {            if (nodes[i] != null) {                copies[i] = new Node(nodes[i].val, new ArrayList<>());            }        }        Arrays.stream(copies).forEach(copy -> {            if (copy != null) {                nodes[copy.val].neighbors.stream().forEach(realNeighbor -> {                    copy.neighbors.add(copies[realNeighbor.val]);                });            }        });                return copies[node.val];            }        public Node[] fillNodes(Node node) {        Node[] nodes = new Node[101];        boolean[] visited = new boolean[101];        if (node == null) return nodes;        ArrayDeque
q = new ArrayDeque<>(); q.offerLast(node); visited[node.val] = true; while (!q.isEmpty()) { Node tempNode = q.pollFirst(); nodes[tempNode.val] = tempNode; tempNode.neighbors.stream() .filter(neighbor -> !visited[neighbor.val]) .forEach(neighbor -> { q.offerLast(neighbor); visited[neighbor.val] = true; }); } return nodes; }}

四刷。。

这傻屌题都四刷了么。。

public class Solution {    Map
map = new HashMap<>(); public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { if (node == null) return null; if (!map.containsKey(node.label)) { map.put(node.label, new UndirectedGraphNode(node.label)); } UndirectedGraphNode res = map.get(node.label); res.neighbors = new ArrayList
(); for (UndirectedGraphNode n : node.neighbors) { if (!map.containsKey(n.label)) { res.neighbors.add(cloneGraph(n)); } else { res.neighbors.add(map.get(n.label)); } } return res; }}

转载于:https://www.cnblogs.com/reboot329/p/5871437.html

你可能感兴趣的文章
py教程第9讲-元组和列表之一
查看>>
科普篇^_^
查看>>
删除用户开发Key的小程序
查看>>
淘宝数据魔方技术架构解析
查看>>
Quartz入门例子简介 从入门到菜鸟(三)
查看>>
3.Servlet实例
查看>>
Shell test命令
查看>>
人生旅程、人生结果
查看>>
2-10 就业课(2.0)-oozie:2、介绍和安装1
查看>>
第二个冲刺 6.3 学术诚信与职业道德
查看>>
[ CodeVS冲杯之路 ] P1169
查看>>
每日一九度之 题目1033:继续xxx定律
查看>>
在PHP语言中使用JSON和将json还原成数组
查看>>
pythonのsqlalchemy外键关联查询
查看>>
密钥管理和安全关联
查看>>
冲刺二阶段-个人总结10
查看>>
PostgreSQL常用SQL
查看>>
SQL学习笔记2:SQL基础(DML)
查看>>
C语言 经典编程100题
查看>>
UVa 113 - Power of Cryptography
查看>>