js算法题,搭积木是否能拼接成一个整体?需要提供一个解题思路,3q

一天,小明买了许多积木回家,他想把这些积木拼接在一起。每块积木有两个接口,每个接口用一个数字标记,规定只有当两块积木有相同数字标记的接口时,这两块积木才可以通过该接口拼接在一起。举例,有两块积木,接口数字分别为[1,2]和[3,4],那么这两块积木无法拼接;若两块积木接口数字分别为[1,2]和[2,3],那么这两块积木可以通过由数字2标记的接口拼接在一起。现在小明知道所有积木的数量和每块积木接口的数字标记,你能告诉他他可以将所有积木拼接成一个整体么?

输入:n个积木的两个接口的数字标记;1≤x,y≤100000;

[[1,2],[2,3],[4,5]]
[[1,2],[2,3],[3,5],[4,5],[4,6],[5,1]]

输出:对于每组测试数据,输出”YES”,表示该组数据中的所有积木可以拼接成一个整体,”NO”表示不行。

NO
YES

第一步
将第一个数插入到链表中

第二步
接下来输入的这个数,从链表头部开始遍历链表,按照顺序插入到链表中。如果链表中存在此值,则说明找到了可以连接在一块的积木。即将原来链表中的此节点删除。

第三步
当遍历完所有的积木之后,计算链表长度,如果等于2,则表示可以将所有的积木串在一起,输入YES. 否则输入NO
可以参考以下
https://blog.csdn.net/u012324136/article/details/77483072

        let obj={}
        for(let i=0;i<arr.length;i++){
            obj[arr[i][1]]=true
        }
        for(let i=0;i<arr.length;i++){
            if(!obj[arr[i][0]]) return false
        }
        return true

可以用 深度优先遍历加动态规划,和之前有个问 圣诞节最多送几个人礼物的问题 很像