- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我最近接受了一次电话采访。它涉及将问题编码作为过程的一部分。
问题是 Find the most closest common ancestor of a tree
的变体,但有一个扭曲。这棵树很像图,即可以连接子节点。示例:
A
/
B
| \
C E
| |
D F
\ /
G
在这种情况下,给定这棵树和节点 F
和 D
,得到的最接近的共同答案将是 B
。第二个转折点是树以数组的形式呈现。实现方法具有以下输入:public String getCA(String[] nodes, String[][] parentNodes, String targetNode1, String targetNode2)
在这个例子中 nodes
= {"G", "F", "E", "D", "C", "B", "A"}
和 parentNodes
= {{"F","D"},{"E"}, {"B"}, {"C"}, {"B"}, {"A"}, 空
本质上,对于 nodes[i]
,parent(s) 是 parentNodes[i]
。
老实说,我完全 panic (已经很紧张了),花了我真的很长时间才找到答案。
虽然我认为这是递归解决的,但我以某种方式提出了一个迭代解决方案,据我所知,它是有效的:我将节点插入队列并首先沿着路径向上移动到第一个目标节点,然后是第二个节点。一旦我找到一个已经遇到的节点,我就将其视为解决方案(已添加注释以清除问题)。
public String getCA(String[] nodes, String[][] parentNodes, String targetNode1, String targetNode2) {
if(nodes == null || parentNodes == null){
throw new IllegalArgumentException();
}
Map<String, String[]> map = new HashMap<String, String[]>();
for(int i = 0; i < nodes.length; i++){
map.put(nodes[i], parentNodes[i]);
}
//These are the parents visited as we go up
Set<String> parentsSeen = new HashSet<String>();
parentsSeen.add(targetNode1);
Queue<String> path = new LinkedList<String>();
String[] parents = map.get(targetNode1);
//The root is the common parent
if(parents == null){
return targetNode1;
}
//Build the path up
for(String parent:parents){
path.add(parent);
}
while(!path.isEmpty()){
String currentParent = path.remove();
parentsSeen.add(currentParent);
parents = map.get(currentParent);
if(parents == null){
continue;
}
for(String parent:parents){
path.add(parent);
}
}
parents = map.get(targetNode2);
//It is the root, so it is the common parent
if(parents == null){
return targetNode2;
}
//Start going up for the targetNode2. The first parent that we have already visited is the common parent
for(String parent:parents){
if(parentsSeen.contains(parent)){
return parent;
}
path.add(parent);
}
while(!path.isEmpty()){
String currentParent = path.remove();
if(parentsSeen.contains(currentParent)){
return currentParent;
}
parents = map.get(currentParent);
if(parents == null){
continue;
}
for(String parent:parents){
path.add(parent);
}
}
return null;
}
我没有接到前进电话。现在由于我是“自学成才”的事实,我很想了解我是如何搞砸这里的。由于这是技术问题,我认为这不是主观问题,希望我能在这里得到有经验的人的帮助。
那么,作为同事的程序员,您将如何处理这个问题以及您如何评估我的解决方案?我需要做什么来提高我的技能?
你可以尽可能直截了当。只要我能明白哪里出了问题并学习我就满足了
最佳答案
我什至不清楚这里的“最接近”是什么意思。考虑下图:
I
/\
/ \
/ \
H E
|\ /|
| \ / |
G \/ D
| /\ |
| / F C
|/ \|
A B
这里有 2 个 A 和 B 的共同祖先,H 和 E。H 与 A 和 B 的距离为 2。E 与 A 的距离为 1,但与 B 的距离为 3。我应该选择哪个?
此外,无论您对该问题的回答是什么,从一个祖先中找到一组祖先然后从另一个中进行 BFS 是行不通的。找到 A 的所有祖先然后从 B 做 BFS 首先找到 H,找到 B 的所有祖先然后从 A 做 BFS 首先找到 E。作为对手,我可以切换 A 和 B 以使您的算法在您做出的任何选择(选择 2/2 或 1/3 更好)方面失败。
所以正确的算法一定比仅祖先集计算加上 BFS 更复杂。除非你告诉我如何做出选择,否则我不确定我能否确定正确的算法。
关于java - "Find common ancestor"的变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12148687/
我有一个 合作伙伴集合,我正在使用 pymongo 来检索数据 当我使用 MongoDB 查询集合时,我看到以下结果 db.partner.find({'unique_key': 'c89dbe313
嗨,我正在尝试在一个 find 命令中查找所有 js 和 css 文件。我尝试了以下所有方法但徒劳无功: find WebContent -name "*.[jc]ss?" find WebConte
我使用以下 find 命令查找并显示所有具有输入文本模式的文件。 找 。 -type f -print|xargs grep -n "模式" 我有很多项目文件夹,每个文件夹都有自己的名为“Makefi
我在Windows环境中使用Gnuwin32二进制文件。 当我想查找某种类型的文件时(例如PDF),我通常运行: find . -iname '*.pdf' -print 这在任何UNIX系统上均可完
我使用的是 Julia 编程语言,我知道你可以通过以下方式使用 find 函数: a = [ 1 2 3 4 3 5 3 6 7 8 9 3 ] find(a .== 3) 它将返回:3,5,7,12
jsperf's link 我不是 jQuery 专家(甚至不是一个好的用户),我没有研究它的整个源代码(只有一小部分不能帮助我解决这个问题)。 有人可以为我解释一下吗? 最佳答案 这个: $p.fi
我应该如何在 CentOS 7 中修复这个错误? [jalal@goku HW4]$ git clone https://github.com/pathak22/pyflow.git Cloning
是否可以更改传递给 find 中的 exec 的参数?例如,我需要以不同的名称复制文件:*.txt -> *.new.txt现在我正在为两个命令执行此操作: find /root/test -name
我想通过cleartool find 命令找到*.cs 和*.cpp 文件。但它失败了。 cleartool find "M:\test_view\code" -name "*.cs *.cpp"
我正在使用 PyMongo,看到有人建议使用 find()[:] 而不是 find()。很好奇有什么区别? 最佳答案 [:] 制作列表的浅拷贝,因此对对象的引用是相同的。我查看了 Pymongo 文档
我正在处理文件和目录,以在每个目录中查找最近修改的文件。我的代码可以工作,但作为 Ruby 的新手,我无法正确处理错误。 我使用 Find.find 获取递归目录列表,为每个目录调用我自己的函数 ne
/usr/bin/ld: cannot find -ldlib /usr/bin/ld: cannot find -lcblas /usr/bin/ld: cannot find -llapack 在
我有一些数据文件的一系列索引文件,它们基本上采用这种格式 索引文件:asdfg.log.1234.2345.index 数据文件:asdfg.log 这个想法是搜索所有索引文件。如果值 XXXX 出现
我有一个 find我运行以查找名称包含 foo 的文件的命令. 我想跳过 .git目录。下面的命令有效 除了 它打印一个 烦人 .git任何时候它跳过 .git目录: find . ( -name .
我有以下想做的事情: find . -maxdepth 6 \( -name \*.tar.gz -o -name bediskmodel -o -name src -o -name ciao -o
当我在表中查找隐藏字段时,我看到了两个隐藏字段。但是,我想通过 ID 进一步细化这两个字段。我注意到,当我使用“包含”在整个表上使用 find 时,我得到了 2 个字段。但是,如果我对隐藏字段的查找结
我正在使用下面的命令生成文件列表及其 m5sum。问题是某些文件或文件夹的名称中有空格。我将如何处理这些? find -type f -name \* | xargs md5sum 最佳答案 尝试:
我正在使用下面的命令生成文件列表及其 m5sum。问题是某些文件或文件夹的名称中有空格。我将如何处理这些? find -type f -name \* | xargs md5sum 最佳答案 尝试:
我有一个使用正则表达式查找文件的脚本。代码如下: find $dir | grep "$regex" 脚本运行有点慢,我想优化一下。搜索需要一些时间来执行,我想从中获得更好的性能。我试过这种尝试: f
这令人沮丧。我认为问题出在 api 响应返回的对象上。也许它是在字符串中,所以我所做的就是复制“postman”的响应并将其直接粘贴到js上。这样我就可以确定它在对象/数组中。但结果还是同样的错误。
我是一名优秀的程序员,十分优秀!