avatar
A家面经求Offer# JobHunting - 待字闺中
r*k
1
面的SDE intern,题目比较简单,但是第二题没答好,希望能拿到offer
1号:
谈谈经历
讨论了一下hashtable的特性,collision怎么办,复杂度如何
hashset和treeset的利弊
然后是题目: BST的第二大元素
2号:
(感觉面试官没怎么好好准备)
OOP题目
一个company,有boss,vp,dir,manager,employee,让设计类
boss下面有2个vp,vp下面有3个dir。然后又让改成节约空间的,再让改成节约时间的
(其实就是想让我用tree实现,无奈OOP太不熟练了,没想到)
avatar
a*o
2
这俩是背靠背吗?

【在 r******k 的大作中提到】
: 面的SDE intern,题目比较简单,但是第二题没答好,希望能拿到offer
: 1号:
: 谈谈经历
: 讨论了一下hashtable的特性,collision怎么办,复杂度如何
: hashset和treeset的利弊
: 然后是题目: BST的第二大元素
: 2号:
: (感觉面试官没怎么好好准备)
: OOP题目
: 一个company,有boss,vp,dir,manager,employee,让设计类

avatar
c*t
3
然后是题目: BST的第二大元素
应该是 从右子树开始inorder travesal的第二个吧。要求必须iteration吗?

【在 r******k 的大作中提到】
: 面的SDE intern,题目比较简单,但是第二题没答好,希望能拿到offer
: 1号:
: 谈谈经历
: 讨论了一下hashtable的特性,collision怎么办,复杂度如何
: hashset和treeset的利弊
: 然后是题目: BST的第二大元素
: 2号:
: (感觉面试官没怎么好好准备)
: OOP题目
: 一个company,有boss,vp,dir,manager,employee,让设计类

avatar
l*b
4
找到最大然后call一下in order previous?

【在 c********t 的大作中提到】
: 然后是题目: BST的第二大元素
: 应该是 从右子树开始inorder travesal的第二个吧。要求必须iteration吗?

avatar
r*k
5
没要求,虽然我当时是用iteration

【在 c********t 的大作中提到】
: 然后是题目: BST的第二大元素
: 应该是 从右子树开始inorder travesal的第二个吧。要求必须iteration吗?

avatar
f*7
6
Bless
avatar
p*2
7

就是最右叶子的父亲吧?如果没有右子树,就是左子树的最右叶子。

【在 c********t 的大作中提到】
: 然后是题目: BST的第二大元素
: 应该是 从右子树开始inorder travesal的第二个吧。要求必须iteration吗?

avatar
e*e
8
bless! recursion is a simple solution based on coldknight's suggestion. It's
the reverse inorder.
first right sub-tree
then itself
last left sub-tree.
avatar
p*2
9

's
没这么麻烦吧?

【在 e****e 的大作中提到】
: bless! recursion is a simple solution based on coldknight's suggestion. It's
: the reverse inorder.
: first right sub-tree
: then itself
: last left sub-tree.

avatar
d*x
10
1
\
3
/
2

【在 p*****2 的大作中提到】
:
: 's
: 没这么麻烦吧?

avatar
p*2
11
错了呗。
1
\
2
/
3
这个是BST吗?
avatar
d*x
12
我改了
想的是上面那个

【在 p*****2 的大作中提到】
: 错了呗。
: 1
: \
: 2
: /
: 3
: 这个是BST吗?

avatar
p*2
13

确实呀。我想一下。

【在 d**********x 的大作中提到】
: 我改了
: 想的是上面那个

avatar
e*e
14
recursion不麻烦。几行代码而已.
int count = 0;
Node found;
public void secondLargest(Node root) {
if ( root == null )
return;
secondLargest( root.right );
count++;
if ( count == 2 ) {
found = root;
return;
}
secondLargest( root.left );
}

【在 p*****2 的大作中提到】
:
: 确实呀。我想一下。

avatar
p*2
15

主要是面试的时候很可能不让用recursion

【在 e****e 的大作中提到】
: recursion不麻烦。几行代码而已.
: int count = 0;
: Node found;
: public void secondLargest(Node root) {
: if ( root == null )
: return;
: secondLargest( root.right );
: count++;
: if ( count == 2 ) {
: found = root;

avatar
d*x
16
你的方向应该是对的
只是情况没考虑周全。。。

【在 p*****2 的大作中提到】
:
: 主要是面试的时候很可能不让用recursion

avatar
a*o
17
最右叶子,如果有左子树,那就是左子树的最右叶子
否则就是父亲,如果没有父亲,就是左子树的最右叶子
一共三种情况

【在 p*****2 的大作中提到】
:
: 主要是面试的时候很可能不让用recursion

avatar
c*t
18
那就用stack啊

【在 p*****2 的大作中提到】
:
: 主要是面试的时候很可能不让用recursion

avatar
d*x
19
1
\
3
/
2
\
2.5

【在 a***o 的大作中提到】
: 最右叶子,如果有左子树,那就是左子树的最右叶子
: 否则就是父亲,如果没有父亲,就是左子树的最右叶子
: 一共三种情况

avatar
a*o
20
你这个不是BST吧
3的左子树都要<3的

【在 d**********x 的大作中提到】
: 1
: \
: 3
: /
: 2
: \
: 2.5

avatar
d*x
21
sorry
我总是想到那个结构。。然后数字写错,你看我改的

【在 a***o 的大作中提到】
: 你这个不是BST吧
: 3的左子树都要<3的

avatar
p*2
22

def secondLargest(root:TreeNode):TreeNode={
if(root==null || root.left==null && root.right==null) return null
var node=root
while(node.right!=null && node.right.right!=null) node=node.right
if(node.right==null || node.right.left!=null){
node=if(node.right==null) node.left else node.right.left
while(node.right!=null) node=node.right
}
node
}
这个行吗?还没好好过test case

【在 d**********x 的大作中提到】
: 你的方向应该是对的
: 只是情况没考虑周全。。。

avatar
a*o
23
3kx,我也改了一下,改成左子树的最有叶子

【在 d**********x 的大作中提到】
: sorry
: 我总是想到那个结构。。然后数字写错,你看我改的

avatar
p*2
24

这题应该没那么麻烦。

【在 c********t 的大作中提到】
: 那就用stack啊
avatar
p*2
26

我的思路跟你是一样的。有什么问题吗?

【在 a***o 的大作中提到】
: 3kx,我也改了一下,改成左子树的最有叶子
avatar
d*x
27
那就应该没问题了

【在 p*****2 的大作中提到】
:
: 我的思路跟你是一样的。有什么问题吗?

avatar
d*x
29
这个特殊问题里不需要,只要记录两个节点,轮换着来就行了
因为这个问题里前驱无非是最右leaf的左子树的最大节点,或者是它的parent。

【在 c********t 的大作中提到】
: 如果node没有parent 指针,前驱怎么找?我看还要遍历才行。
avatar
p*2
30

看看我的code有没有什么问题。

【在 c********t 的大作中提到】
: 如果node没有parent 指针,前驱怎么找?我看还要遍历才行。
avatar
c*t
31
明白了,没有问题。
多谢devil和二爷!

【在 p*****2 的大作中提到】
:
: 看看我的code有没有什么问题。

avatar
e*s
33
求设计题答案,节约空间,节约时间是个什么做法?
avatar
e*e
34
I'm not sure about "节约空间,节约时间是个什么做法?".
Here are my classes.
enum Role{
BOSS,
VP,
DIR,
MANAGER,
...
}
class Employee{
String id;
Role role;
List managed;
}
Maybe another class keep track of all references to the vips, dirs, managers
... so we can get them from this class by a single get method instead of
traversing from Boss employee. Like
class QuickRetrival {
List vips;
List dirs;
List managers;
...
}

【在 e***s 的大作中提到】
: 求设计题答案,节约空间,节约时间是个什么做法?
avatar
e*s
35
谢谢,有没有大牛能解释一下节约空间,节约时间是怎么个思路?

【在 e****e 的大作中提到】
: I'm not sure about "节约空间,节约时间是个什么做法?".
: Here are my classes.
: enum Role{
: BOSS,
: VP,
: DIR,
: MANAGER,
: ...
: }
: class Employee{

avatar
e*s
36
我推敲了一下,是不是用继承比较好。
class Employee{
UUID id;
String name;
List subordinates;
...
}
class Boss extends Employee{
}
class VP extends Employee{
}
...
这样是不是更符合开闭原则?

【在 e****e 的大作中提到】
: I'm not sure about "节约空间,节约时间是个什么做法?".
: Here are my classes.
: enum Role{
: BOSS,
: VP,
: DIR,
: MANAGER,
: ...
: }
: class Employee{

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