Redian新闻
>
请教cracking the code interview两题
avatar
请教cracking the code interview两题# JobHunting - 待字闺中
g*o
1
我是第5版书
(1)4.7题 求不带parent指针的binary tree的LCA(不考虑node不在tree里的情况)
书上的解法很罗嗦,很容易漏掉某种情况,leetcode的代码就简洁多了,如下:
Node *LCA(Node *root, Node *p, Node *q) {
if (!root) return NULL;
if (root == p || root == q) return root;
Node *L = LCA(root->left, p, q);
Node *R = LCA(root->right, p, q);
if (L && R) return root; // if p and q are on both sides
return L ? L : R; // either one of p,q is on one side OR p,q is not in L&
R subtrees
}
想确认下leetcode的代吗覆盖所有corner case了吗? 至少我没看出什么问题。
(2)9.5题 Write a method to compute all permutations of a string
我觉得书上解法的复杂度比 o(n!)要大?
那些recursion和for loop就达到o(n!),而书上的解法用string相加,所有每次都要花o
(n)来做string insert,我怎么感觉总复杂度是o((n!)^2)
要我我就用下面这个做法了
/* Function to print permutations of string
This function takes three parameters:
1. String
2. Starting index of the string
3. Ending index of the string. */
void permute(char *a, int i, int n)
{
int j;
if (i == n)
printf("%s\n", a);
else
{
for (j = i; j <= n; j++)
{
swap((a+i), (a+j));
permute(a, i+1, n);
swap((a+i), (a+j)); //backtrack
}
}
}
avatar
p*2
2
这本书问题很多。看看就算了。那个作者水平一般。
avatar
g*o
3
感谢大牛回帖!
要不大家有空一起总结下书里算法的问题?
感觉书里的题目还是不错的。重考率很高
我on campus interview 80%的题书里都有
除了上面的两道,还被问了OOD的扑克牌设计

【在 p*****2 的大作中提到】
: 这本书问题很多。看看就算了。那个作者水平一般。
avatar
p*2
4

我现在重点是system design了。CC150上的题目我总结过,而且很多题leetcode上也有
。CC150上的考到的概率确实很高。

【在 g****o 的大作中提到】
: 感谢大牛回帖!
: 要不大家有空一起总结下书里算法的问题?
: 感觉书里的题目还是不错的。重考率很高
: 我on campus interview 80%的题书里都有
: 除了上面的两道,还被问了OOD的扑克牌设计

avatar
b*5
5
你会把你的总结, 写到你的blog上么?

【在 p*****2 的大作中提到】
:
: 我现在重点是system design了。CC150上的题目我总结过,而且很多题leetcode上也有
: 。CC150上的考到的概率确实很高。

avatar
p*2
6

那个总结的比较简单。只发到了这个板上。

【在 b**********5 的大作中提到】
: 你会把你的总结, 写到你的blog上么?
avatar
l*n
7
你说的system design是指的交互设计还是scalability设计?

【在 p*****2 的大作中提到】
:
: 那个总结的比较简单。只发到了这个板上。

avatar
p*2
8

主要是distributed吧。scalability相关的。面试经常考的。

【在 l*n 的大作中提到】
: 你说的system design是指的交互设计还是scalability设计?
avatar
l*n
9
能给几个例子吗?

【在 p*****2 的大作中提到】
:
: 主要是distributed吧。scalability相关的。面试经常考的。

avatar
h*o
10
if (root == p || root == q) return root;
书上好像不是这样认为。see line 30-35.
我当时还比较了半天那。要这么简单就好了。不过这些题真是耗我的青春。

L&

【在 g****o 的大作中提到】
: 我是第5版书
: (1)4.7题 求不带parent指针的binary tree的LCA(不考虑node不在tree里的情况)
: 书上的解法很罗嗦,很容易漏掉某种情况,leetcode的代码就简洁多了,如下:
: Node *LCA(Node *root, Node *p, Node *q) {
: if (!root) return NULL;
: if (root == p || root == q) return root;
: Node *L = LCA(root->left, p, q);
: Node *R = LCA(root->right, p, q);
: if (L && R) return root; // if p and q are on both sides
: return L ? L : R; // either one of p,q is on one side OR p,q is not in L&

avatar
h*o
11
请问二爷,你说这题重要。要面你,你用leetcode上的方法吗? leetcode上的方法比
较好理解。但和cc150结果有出入。

【在 h**o 的大作中提到】
: if (root == p || root == q) return root;
: 书上好像不是这样认为。see line 30-35.
: 我当时还比较了半天那。要这么简单就好了。不过这些题真是耗我的青春。
:
: L&

avatar
p*o
12
关于排列的问题,
你的方法相当于是 process-then-recur. 而CC150的方法是recur-then-process. 相比
之下,CC150写的是有点复杂.复杂度应该也是O(n!)吧,(不是很确定).
不过除了算法之外,很多代码写出来难易,也跟选择的语言,可供调用库接口,具体的
输入输出要求有很大关系.
顺便搭车问一句,谁有CC150第5版电子版? 能否发一个.

L&

【在 g****o 的大作中提到】
: 我是第5版书
: (1)4.7题 求不带parent指针的binary tree的LCA(不考虑node不在tree里的情况)
: 书上的解法很罗嗦,很容易漏掉某种情况,leetcode的代码就简洁多了,如下:
: Node *LCA(Node *root, Node *p, Node *q) {
: if (!root) return NULL;
: if (root == p || root == q) return root;
: Node *L = LCA(root->left, p, q);
: Node *R = LCA(root->right, p, q);
: if (L && R) return root; // if p and q are on both sides
: return L ? L : R; // either one of p,q is on one side OR p,q is not in L&

avatar
f*8
13
请问二爷能给一总结的链接么?
刚才考古没有找到~~~
多谢了!

【在 p*****2 的大作中提到】
:
: 主要是distributed吧。scalability相关的。面试经常考的。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。