由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - word ladder II 找所有而不是第一个的最短路径一般咋做的?
相关主题
这段word ladder II怎么改?Given a node of a tree, find all nodes on the same level
插入节点到complete binary tree的末尾MS onsite 面经
菜鸟用careercup书和leetcode准备的一点体会google电面杯具,贡献题目
leetcode出了新题word ladderG家电面面经--佛云了~~
请问一道题BST 找重复节点数
请教个G题目一道linkedin的graph题
leetcode wordladder2 求助!(solved)recovery BST 不考虑相同值的情况么?
FB电面的标准就那么高?cc150 2.1 的一个小问题,希望大神路过来看一眼,小女子在此谢
相关话题的讨论汇总
话题: vector话题: node话题: string话题: int话题: pathindex
进入JobHunting版参与讨论
1 (共1页)
h**********y
发帖数: 1293
1
似乎可以修改下BFS来做?
IDS?
p*****2
发帖数: 21240
2
我认为这题可以skip
f*******t
发帖数: 7549
3
为什么?
其实可以写一下,实在过不了leetcode large case就算了

【在 p*****2 的大作中提到】
: 我认为这题可以skip
h**********y
发帖数: 1293
4
大牛就大概说说general的做法呗。。。

【在 p*****2 的大作中提到】
: 我认为这题可以skip
p*****2
发帖数: 21240
5

因为Leetcode就是准备面试用的,不是玩竞赛的。对于面试来说,这题不是原题,原题
在CC150里。面试中遇到的也是CC150的原题。从算法和竞赛来讲,最短路径一般都是找
一条的,参见Dijkstra, 或者找所有pair的,参见Floyd-Warshall,但是所有pair也
是找最小cost而不是所有路径。另外每个pair只需要一个最短就可以了。因此word
ldadder II这题出的很诡异。既不是面试题,又不是竞赛题,我不知道有什么特别的意
义。
通常竞赛来说,输入的规模,时间,空间的要求都说的很详细。一般不需要写code就可
以把算法想的八九不离十,但是这题感觉就是要去死磕,我不太清楚,花那么多时间的
收获是什么。当然你要是觉得值得去做也没什么问题。我肯定不会花这个时间了。

【在 f*******t 的大作中提到】
: 为什么?
: 其实可以写一下,实在过不了leetcode large case就算了

p*****2
发帖数: 21240
6

你去看看CC150最后一章里有面试的原题,答案也有。面试就够了。

【在 h**********y 的大作中提到】
: 大牛就大概说说general的做法呗。。。
h**********y
发帖数: 1293
7
明白了。谢谢大牛指点。

【在 p*****2 的大作中提到】
:
: 你去看看CC150最后一章里有面试的原题,答案也有。面试就够了。

i**********e
发帖数: 1145
8
我不认同你所说的。
首先,准备面试必须要想得深入,一道题可以有很多变种和扩展,不是仅仅做对这道题
就够了。
对,这道题的扩展是我自己想出来的。面试你很快做出来一道题了,很好,但这不够
impress。通常一个好的面试官会问许多的follow up,你在 follow up 的时候能展示
你的思维灵活贯通就更好了。
生活中很多时候都必须列举所有可能性的。如果这是个真实游戏,玩家还是希望能看到
所有的答案。
竞赛题之所以只输出一个最短的 是仅仅方便检查程序的输出而已。
只是我一点点的两分钱,just my 2 cents。

【在 p*****2 的大作中提到】
:
: 你去看看CC150最后一章里有面试的原题,答案也有。面试就够了。

h***i
发帖数: 1970
9
要是竞赛的话,这道题的正解应该是A*

【在 i**********e 的大作中提到】
: 我不认同你所说的。
: 首先,准备面试必须要想得深入,一道题可以有很多变种和扩展,不是仅仅做对这道题
: 就够了。
: 对,这道题的扩展是我自己想出来的。面试你很快做出来一道题了,很好,但这不够
: impress。通常一个好的面试官会问许多的follow up,你在 follow up 的时候能展示
: 你的思维灵活贯通就更好了。
: 生活中很多时候都必须列举所有可能性的。如果这是个真实游戏,玩家还是希望能看到
: 所有的答案。
: 竞赛题之所以只输出一个最短的 是仅仅方便检查程序的输出而已。
: 只是我一点点的两分钱,just my 2 cents。

p*****2
发帖数: 21240
10

我个人希望做Leetcode的OJ能够接近做面试题的感觉。否则的话还不如去做TC和CF等等
呢。如果真是愿意死磕的话,去做IS就行了。前边有人说了这题做了5天还不知道怎么
回事。我不太清楚花5天是不是值得。面试能碰到这种要求的概率我觉得很低了,不如
把时间用来做高频题。还有就算面试出现了,我觉得也仅仅限于讨论阶段,不太可能要
求面试者在短短的时间把这题可以做到可以pass OJ。不过这也是我的个人观点,我也
常常犯错误,我理解有问题的可能性也是蛮大的。

【在 i**********e 的大作中提到】
: 我不认同你所说的。
: 首先,准备面试必须要想得深入,一道题可以有很多变种和扩展,不是仅仅做对这道题
: 就够了。
: 对,这道题的扩展是我自己想出来的。面试你很快做出来一道题了,很好,但这不够
: impress。通常一个好的面试官会问许多的follow up,你在 follow up 的时候能展示
: 你的思维灵活贯通就更好了。
: 生活中很多时候都必须列举所有可能性的。如果这是个真实游戏,玩家还是希望能看到
: 所有的答案。
: 竞赛题之所以只输出一个最短的 是仅仅方便检查程序的输出而已。
: 只是我一点点的两分钱,just my 2 cents。

相关主题
请教个G题目Given a node of a tree, find all nodes on the same level
leetcode wordladder2 求助!(solved)MS onsite 面经
FB电面的标准就那么高?google电面杯具,贡献题目
进入JobHunting版参与讨论
p*****2
发帖数: 21240
11

还有就是大牛能不能讲讲求所有最短路径的general算法是什么呢?

【在 i**********e 的大作中提到】
: 我不认同你所说的。
: 首先,准备面试必须要想得深入,一道题可以有很多变种和扩展,不是仅仅做对这道题
: 就够了。
: 对,这道题的扩展是我自己想出来的。面试你很快做出来一道题了,很好,但这不够
: impress。通常一个好的面试官会问许多的follow up,你在 follow up 的时候能展示
: 你的思维灵活贯通就更好了。
: 生活中很多时候都必须列举所有可能性的。如果这是个真实游戏,玩家还是希望能看到
: 所有的答案。
: 竞赛题之所以只输出一个最短的 是仅仅方便检查程序的输出而已。
: 只是我一点点的两分钱,just my 2 cents。

p****e
发帖数: 3548
12
修改下BFS也可以,要记下路径就行
用'a'-'z'方法再写了一个
大数据: 750ms
class Solution {
public:
void getrows(vector, unordered_map::
iterator> > &path,
int col, vector &row, vector > &
ret){
row.push_back(path[col].second->first);
vector & cp = path[col].first;
for(int i=0; i if(cp[i] < 0){
reverse(row.begin(), row.end());
ret.push_back(row);
reverse(row.begin(), row.end());
break;
}
else
getrows(path, cp[i], row, ret);
}
row.pop_back();
}
vector> findLadders(string start, string end, unordered_
set &dict) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector > ret;
vector, unordered_map::iterator> >
path;
unordered_map useddict;
path.push_back(make_pair(vector(1,-1),
useddict.insert(make_pair(start, 0)).first));
bool found = false;
int pathindex = 0;
int pathsize = 0;
do{
pathsize = path.size();
for(; pathindex < pathsize; pathindex++){
string s = path[pathindex].second->first;
bool sf = false;
for(int i=0; i < s.size() && !sf; ++i){
char o = s[i];
for(char c='a'; c<='z'; ++c){
if(c==o) continue;
s[i] = c;
if(s == end){
found = true;
sf = true;
vector row(1, end);
getrows(path, pathindex, row, ret);
break;
}
if(!found && dict.count(s)){
auto it = useddict.find(s);
if(it == useddict.end())
path.push_back(make_pair(vector(1,
pathindex),
useddict.insert(make_pair(s, path.size()
)).first));
else if(it->second >= pathsize)
path[it->second].first.push_back(
pathindex);
}
}
s[i] = o;
}
}
if(found) break;
}
while(pathsize return ret;
}
};

【在 h**********y 的大作中提到】
: 似乎可以修改下BFS来做?
: IDS?

s*w
发帖数: 729
13
1. 去掉 BFS 中 search 到 end 要退出这段
2. BFS 中 current node 的 neighbors 里,本来只考虑没发现的 node (white node)
, 要改成也考虑 gray node (如果 gray node 深度是当前node 深度+1,就说明该
gray node 的 parent 除了它以前的 parent (把它从白变灰的那个) 也包括了当前
node
3. 每个 node 有若干 parent, 从 end 递归上去就可重建所有最短 path

【在 h**********y 的大作中提到】
: 似乎可以修改下BFS来做?
: IDS?

h**********y
发帖数: 1293
14
似乎可以修改下BFS来做?
IDS?
p*****2
发帖数: 21240
15
我认为这题可以skip
f*******t
发帖数: 7549
16
为什么?
其实可以写一下,实在过不了leetcode large case就算了

【在 p*****2 的大作中提到】
: 我认为这题可以skip
h**********y
发帖数: 1293
17
大牛就大概说说general的做法呗。。。

【在 p*****2 的大作中提到】
: 我认为这题可以skip
p*****2
发帖数: 21240
18

因为Leetcode就是准备面试用的,不是玩竞赛的。对于面试来说,这题不是原题,原题
在CC150里。面试中遇到的也是CC150的原题。从算法和竞赛来讲,最短路径一般都是找
一条的,参见Dijkstra, 或者找所有pair的,参见Floyd-Warshall,但是所有pair也
是找最小cost而不是所有路径。另外每个pair只需要一个最短就可以了。因此word
ldadder II这题出的很诡异。既不是面试题,又不是竞赛题,我不知道有什么特别的意
义。
通常竞赛来说,输入的规模,时间,空间的要求都说的很详细。一般不需要写code就可
以把算法想的八九不离十,但是这题感觉就是要去死磕,我不太清楚,花那么多时间的
收获是什么。当然你要是觉得值得去做也没什么问题。我肯定不会花这个时间了。

【在 f*******t 的大作中提到】
: 为什么?
: 其实可以写一下,实在过不了leetcode large case就算了

p*****2
发帖数: 21240
19

你去看看CC150最后一章里有面试的原题,答案也有。面试就够了。

【在 h**********y 的大作中提到】
: 大牛就大概说说general的做法呗。。。
h**********y
发帖数: 1293
20
明白了。谢谢大牛指点。

【在 p*****2 的大作中提到】
:
: 你去看看CC150最后一章里有面试的原题,答案也有。面试就够了。

相关主题
G家电面面经--佛云了~~recovery BST 不考虑相同值的情况么?
BST 找重复节点数cc150 2.1 的一个小问题,希望大神路过来看一眼,小女子在此谢
一道linkedin的graph题贡献G电 估计挂了
进入JobHunting版参与讨论
i**********e
发帖数: 1145
21
我不认同你所说的。
首先,准备面试必须要想得深入,一道题可以有很多变种和扩展,不是仅仅做对这道题
就够了。
对,这道题的扩展是我自己想出来的。面试你很快做出来一道题了,很好,但这不够
impress。通常一个好的面试官会问许多的follow up,你在 follow up 的时候能展示
你的思维灵活贯通就更好了。
生活中很多时候都必须列举所有可能性的。如果这是个真实游戏,玩家还是希望能看到
所有的答案。
竞赛题之所以只输出一个最短的 是仅仅方便检查程序的输出而已。
只是我一点点的两分钱,just my 2 cents。

【在 p*****2 的大作中提到】
:
: 你去看看CC150最后一章里有面试的原题,答案也有。面试就够了。

h***i
发帖数: 1970
22
要是竞赛的话,这道题的正解应该是A*

【在 i**********e 的大作中提到】
: 我不认同你所说的。
: 首先,准备面试必须要想得深入,一道题可以有很多变种和扩展,不是仅仅做对这道题
: 就够了。
: 对,这道题的扩展是我自己想出来的。面试你很快做出来一道题了,很好,但这不够
: impress。通常一个好的面试官会问许多的follow up,你在 follow up 的时候能展示
: 你的思维灵活贯通就更好了。
: 生活中很多时候都必须列举所有可能性的。如果这是个真实游戏,玩家还是希望能看到
: 所有的答案。
: 竞赛题之所以只输出一个最短的 是仅仅方便检查程序的输出而已。
: 只是我一点点的两分钱,just my 2 cents。

p*****2
发帖数: 21240
23

我个人希望做Leetcode的OJ能够接近做面试题的感觉。否则的话还不如去做TC和CF等等
呢。如果真是愿意死磕的话,去做IS就行了。前边有人说了这题做了5天还不知道怎么
回事。我不太清楚花5天是不是值得。面试能碰到这种要求的概率我觉得很低了,不如
把时间用来做高频题。还有就算面试出现了,我觉得也仅仅限于讨论阶段,不太可能要
求面试者在短短的时间把这题可以做到可以pass OJ。不过这也是我的个人观点,我也
常常犯错误,我理解有问题的可能性也是蛮大的。

【在 i**********e 的大作中提到】
: 我不认同你所说的。
: 首先,准备面试必须要想得深入,一道题可以有很多变种和扩展,不是仅仅做对这道题
: 就够了。
: 对,这道题的扩展是我自己想出来的。面试你很快做出来一道题了,很好,但这不够
: impress。通常一个好的面试官会问许多的follow up,你在 follow up 的时候能展示
: 你的思维灵活贯通就更好了。
: 生活中很多时候都必须列举所有可能性的。如果这是个真实游戏,玩家还是希望能看到
: 所有的答案。
: 竞赛题之所以只输出一个最短的 是仅仅方便检查程序的输出而已。
: 只是我一点点的两分钱,just my 2 cents。

p*****2
发帖数: 21240
24

还有就是大牛能不能讲讲求所有最短路径的general算法是什么呢?

【在 i**********e 的大作中提到】
: 我不认同你所说的。
: 首先,准备面试必须要想得深入,一道题可以有很多变种和扩展,不是仅仅做对这道题
: 就够了。
: 对,这道题的扩展是我自己想出来的。面试你很快做出来一道题了,很好,但这不够
: impress。通常一个好的面试官会问许多的follow up,你在 follow up 的时候能展示
: 你的思维灵活贯通就更好了。
: 生活中很多时候都必须列举所有可能性的。如果这是个真实游戏,玩家还是希望能看到
: 所有的答案。
: 竞赛题之所以只输出一个最短的 是仅仅方便检查程序的输出而已。
: 只是我一点点的两分钱,just my 2 cents。

p****e
发帖数: 3548
25
修改下BFS也可以,要记下路径就行
用'a'-'z'方法再写了一个
大数据: 750ms
class Solution {
public:
void getrows(vector, unordered_map::
iterator> > &path,
int col, vector &row, vector > &
ret){
row.push_back(path[col].second->first);
vector & cp = path[col].first;
for(int i=0; i if(cp[i] < 0){
reverse(row.begin(), row.end());
ret.push_back(row);
reverse(row.begin(), row.end());
break;
}
else
getrows(path, cp[i], row, ret);
}
row.pop_back();
}
vector> findLadders(string start, string end, unordered_
set &dict) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector > ret;
vector, unordered_map::iterator> >
path;
unordered_map useddict;
path.push_back(make_pair(vector(1,-1),
useddict.insert(make_pair(start, 0)).first));
bool found = false;
int pathindex = 0;
int pathsize = 0;
do{
pathsize = path.size();
for(; pathindex < pathsize; pathindex++){
string s = path[pathindex].second->first;
bool sf = false;
for(int i=0; i < s.size() && !sf; ++i){
char o = s[i];
for(char c='a'; c<='z'; ++c){
if(c==o) continue;
s[i] = c;
if(s == end){
found = true;
sf = true;
vector row(1, end);
getrows(path, pathindex, row, ret);
break;
}
if(!found && dict.count(s)){
auto it = useddict.find(s);
if(it == useddict.end())
path.push_back(make_pair(vector(1,
pathindex),
useddict.insert(make_pair(s, path.size()
)).first));
else if(it->second >= pathsize)
path[it->second].first.push_back(
pathindex);
}
}
s[i] = o;
}
}
if(found) break;
}
while(pathsize return ret;
}
};

【在 h**********y 的大作中提到】
: 似乎可以修改下BFS来做?
: IDS?

s*w
发帖数: 729
26
1. 去掉 BFS 中 search 到 end 要退出这段
2. BFS 中 current node 的 neighbors 里,本来只考虑没发现的 node (white node)
, 要改成也考虑 gray node (如果 gray node 深度是当前node 深度+1,就说明该
gray node 的 parent 除了它以前的 parent (把它从白变灰的那个) 也包括了当前
node
3. 每个 node 有若干 parent, 从 end 递归上去就可重建所有最短 path

【在 h**********y 的大作中提到】
: 似乎可以修改下BFS来做?
: IDS?

u******g
发帖数: 89
27
这题是不是测试数据有问题啊……
start = "hot",
end = "dog",
dict = ["hot","cog","dog","tot","hog","hop","pot","dot"],
expected = [["hot","dot","dog"]]
my output= [["hot","dot","dog"],["hot","hog","dog"]]
他题目里明明是说
" find all shortest transformation sequence(s) from start to end"啊
j******s
发帖数: 48
28
Hi,请问word ladder II 的测试数据是不有点问题么?
对于输入:
"hit", "cog", ["hot","cog","dot","dog","hit","lot","log"]
我的输出是
[["hit","hot","dot","dog","cog"],["hit","hot","lot","log","cog"],["hot","dot
","lot","log","cog"],["hot","dot","dog","log","cog"]]
测试数据输出的是
[["hit","hot","dot","dog","cog"],["hit","hot","lot","log","cog"]]
根据题目的定义应该是都可以的吧?
嗯嗯,我知道答案是不是正确不是特别重要,只是这道题我花了很多时间对比BFS,DFS,
IDS以及实现他们的一些不同方式,所以希望可以求证一下而已。
附贴上我的代码
class Solution {
private:
class Node{
public:
string word;
vector parents;
int depth;
int childCount;
Node(string w,int d,int c=0):word(w),depth(d),childCount(c){}
~Node()
{
for(int i=0;i {
if(--(parents[i]->childCount) == 0)
delete parents[i];
}
}
};
public:
vector> findLadders(string start, string end, unordered_
set &dict)
{
vector> result;
map visited;
map visiting;
queue frontier;
Node* st = new Node(start,1);
visiting[start] = st;
frontier.push(st);
bool found = start==end;
int cp = 0;
while(!frontier.empty() && (!found || (found && cp == frontier.front
()->depth)))
{
Node* node = frontier.front();
frontier.pop();
visited[node->word] = node;
visiting.erase(node->word);
cp = node->depth;
string newWord(node->word);
for(int i=0;i {
char c = newWord[i];
for(char j='a';j<='z';j++)
{
newWord[i] = j;
if(dict.count(newWord)>0 && visited.count(newWord)==0)
{
if(newWord == end) found = true;
if(visiting.count(newWord)>0){
(visiting[newWord]->parents).push_back(node);

}else{
Node* newNode = new Node(newWord,cp+1);
(newNode->parents).push_back(node);
visiting[newWord] = newNode;
frontier.push(newNode);
}
node->childCount++;
}
}
newWord[i] = c;
}
if(node->childCount == 0) delete node;
}
if(visiting.count(end)>0)
{
vector path(visiting[end]->depth,"");
addToResult(result,path,visiting[end]->depth-1,visiting[end]);
}
while(!frontier.empty()){delete frontier.front();frontier.pop();}
return result;
}

void addToResult(vector> &result,vector &path,
int depth,Node* node)
{
path[depth] = node->word;
if(depth == 0)
{
result.push_back(path);
return;
}
vector parents = node->parents;
for(int i=0;i addToResult(result,path,depth-1,parents[i]);
}
};

【在 i**********e 的大作中提到】
: 我不认同你所说的。
: 首先,准备面试必须要想得深入,一道题可以有很多变种和扩展,不是仅仅做对这道题
: 就够了。
: 对,这道题的扩展是我自己想出来的。面试你很快做出来一道题了,很好,但这不够
: impress。通常一个好的面试官会问许多的follow up,你在 follow up 的时候能展示
: 你的思维灵活贯通就更好了。
: 生活中很多时候都必须列举所有可能性的。如果这是个真实游戏,玩家还是希望能看到
: 所有的答案。
: 竞赛题之所以只输出一个最短的 是仅仅方便检查程序的输出而已。
: 只是我一点点的两分钱,just my 2 cents。

1 (共1页)
进入JobHunting版参与讨论
相关主题
cc150 2.1 的一个小问题,希望大神路过来看一眼,小女子在此谢请问一道题
贡献G电 估计挂了请教个G题目
Leetcode word ladder 求助!leetcode wordladder2 求助!(solved)
python里面怎么表示树?FB电面的标准就那么高?
这段word ladder II怎么改?Given a node of a tree, find all nodes on the same level
插入节点到complete binary tree的末尾MS onsite 面经
菜鸟用careercup书和leetcode准备的一点体会google电面杯具,贡献题目
leetcode出了新题word ladderG家电面面经--佛云了~~
相关话题的讨论汇总
话题: vector话题: node话题: string话题: int话题: pathindex