由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 刚刚A 家第三电面悲剧。贡献两题。
相关主题
回馈本版,新鲜店面,新题新气象题目: iterative binary tree post order traversal
请教个G题目reverse链表
面试的时候 binary tree的delete也要15分钟之内写完么?mirror 一个binary tree, 用non-recursive解法怎么做
问个二叉树删除结点的问题"Hacking a G Interview"怎么有这样低级错?
一道题:2个BST,按大小顺序打印两棵树的所有节点请教一道单链表问题
发现一个很恶心的基础问题yahoo onsite
一道linked list编程题版上看到的几道F家的题目
这个check whether a binary tree is a BST or not感觉今天结结实实被烙印阴了
相关话题的讨论汇总
话题: node话题: null话题: head话题: int话题: return
进入JobHunting版参与讨论
1 (共1页)
b******u
发帖数: 81
1
第一电面,美国大哥。
第二电面,印度MM。
第三电面,中国弟弟。悲剧。
死而无怨。
印度MM: 写 code: LINDE LIST 两两互换。
中国弟弟:写 code: BINARY SEARCH TREE 第五大的数。
g*********e
发帖数: 14401
2
pat pat
l*********8
发帖数: 4642
3
LINDE LIST 是指 Linked List?
BINARY SEARCH TREE 第五大的数, 应该是逆中序遍历到第五个吧?

【在 b******u 的大作中提到】
: 第一电面,美国大哥。
: 第二电面,印度MM。
: 第三电面,中国弟弟。悲剧。
: 死而无怨。
: 印度MM: 写 code: LINDE LIST 两两互换。
: 中国弟弟:写 code: BINARY SEARCH TREE 第五大的数。

t********e
发帖数: 143
4
void bstVisit(const node *p_node, const int n, int &m)
{
if (!p_node)
return;
bstVisit(p_node->p_right, n, m);
m++;
if (m == n)
printNode(p_node);
bstVisit(p_node->p_left, n, m);
}
p*****2
发帖数: 21240
5
你是用C面试吗?第二题用java还有点麻烦
Z*****Z
发帖数: 723
6

else // no need to proceed if already found target

【在 t********e 的大作中提到】
: void bstVisit(const node *p_node, const int n, int &m)
: {
: if (!p_node)
: return;
: bstVisit(p_node->p_right, n, m);
: m++;
: if (m == n)
: printNode(p_node);
: bstVisit(p_node->p_left, n, m);
: }

s*******s
发帖数: 44
7
public static int find(Node root, int n, Integer rank) {
if (root == null)
return rank;
rank = find(root.right, n, rank);
rank++;
if (rank == n) {
System.out.println(root.value);
return rank;
}
return find(root.left, n, rank);
}

【在 p*****2 的大作中提到】
: 你是用C面试吗?第二题用java还有点麻烦
p*****2
发帖数: 21240
8

打印出来当然不麻烦了。如果要返回去就麻烦一些了。

【在 s*******s 的大作中提到】
: public static int find(Node root, int n, Integer rank) {
: if (root == null)
: return rank;
: rank = find(root.right, n, rank);
: rank++;
: if (rank == n) {
: System.out.println(root.value);
: return rank;
: }
: return find(root.left, n, rank);

s*******s
发帖数: 44
9
恩,而且才发现不需要Integer,int就行。。
要返回只能用Pair?

【在 p*****2 的大作中提到】
:
: 打印出来当然不麻烦了。如果要返回去就麻烦一些了。

s******n
发帖数: 3946
10
void bstVisit(const node *p_node, int n)
{
if (!p_node || !n)
return;
bstVisit(p_node->p_right, n);
n--;
if (!n)
printNode(p_node);
bstVisit(p_node->p_left, n);
}
相关主题
发现一个很恶心的基础问题题目: iterative binary tree post order traversal
一道linked list编程题reverse链表
这个check whether a binary tree is a BST or notmirror 一个binary tree, 用non-recursive解法怎么做
进入JobHunting版参与讨论
b******u
发帖数: 81
11
原题。这题我基本做出来了,但是不很顺。
Given a singly linked list swap the adjacent nodes in the list
1-4-5-6-3
4-1-6-5-3

【在 l*********8 的大作中提到】
: LINDE LIST 是指 Linked List?
: BINARY SEARCH TREE 第五大的数, 应该是逆中序遍历到第五个吧?

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

得定义个class吧。好像java就得这么搞。

【在 s*******s 的大作中提到】
: 恩,而且才发现不需要Integer,int就行。。
: 要返回只能用Pair?

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

这题考的也挺多。不过也还没练过。我总觉得面试应该能做出来。

【在 b******u 的大作中提到】
: 原题。这题我基本做出来了,但是不很顺。
: Given a singly linked list swap the adjacent nodes in the list
: 1-4-5-6-3
: 4-1-6-5-3

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

你看了上边的答案了吗?

【在 b******u 的大作中提到】
: 原题。这题我基本做出来了,但是不很顺。
: Given a singly linked list swap the adjacent nodes in the list
: 1-4-5-6-3
: 4-1-6-5-3

b******u
发帖数: 81
15
我上面还是做错了。刚看了 tradertobe 的答案, PERFECT! 用C#抄了一遍。
public static int? FindNthNumber(Node n, ref int rank, int nth)
{
if (n == null) return null;
int? result = FindNthNumber(n.right, ref rank, nth);
if (result == null)
{
if (rank == nth)
{
result = n.Num;
}
else
{
rank ++;
result = FindNthNumber(n.left, ref rank, nth);
}
}
return result;
}

【在 p*****2 的大作中提到】
:
: 你看了上边的答案了吗?

b***d
发帖数: 87
16
定义个类变量也可以的(类似全局变量)。不知道面试当中是否允许这样用??

【在 p*****2 的大作中提到】
:
: 你看了上边的答案了吗?

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

是可以。就看面试怎么要求了。我觉得打印,全局最好。反正应该也不是面试的重点。

【在 b***d 的大作中提到】
: 定义个类变量也可以的(类似全局变量)。不知道面试当中是否允许这样用??
l*****a
发帖数: 14598
18
这样好不好
有一道著名的题 find next node in InOrder Traverse.
Now we can implement it's opposite action.
find previous node in InOrder Traverse.
node * FindNthNode(node * root,int n)
{
if((root==null)||(n<=0)) return null;
find rightmost;
if(n==1) return rightmost;
node * current=rightmost;
for(int i=2;i<=n;i++)
{
current=GetInOrderPreNode(current);
if(current==null) return null;
}
return current;
}

【在 p*****2 的大作中提到】
:
: 是可以。就看面试怎么要求了。我觉得打印,全局最好。反正应该也不是面试的重点。

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

那个东西我还没写过呢。

【在 l*****a 的大作中提到】
: 这样好不好
: 有一道著名的题 find next node in InOrder Traverse.
: Now we can implement it's opposite action.
: find previous node in InOrder Traverse.
: node * FindNthNode(node * root,int n)
: {
: if((root==null)||(n<=0)) return null;
: find rightmost;
: if(n==1) return rightmost;
: node * current=rightmost;

b******u
发帖数: 81
20
哈哈,和我以为做错了的思路是一样的。
不过写下来的程序没有tradertobe的好看。
我改写的 C#程序 返回了结果。

【在 l*****a 的大作中提到】
: 这样好不好
: 有一道著名的题 find next node in InOrder Traverse.
: Now we can implement it's opposite action.
: find previous node in InOrder Traverse.
: node * FindNthNode(node * root,int n)
: {
: if((root==null)||(n<=0)) return null;
: find rightmost;
: if(n==1) return rightmost;
: node * current=rightmost;

相关主题
"Hacking a G Interview"怎么有这样低级错?版上看到的几道F家的题目
请教一道单链表问题感觉今天结结实实被烙印阴了
yahoo onsitePopulating Next Right Pointers in Each Node II
进入JobHunting版参与讨论
b******u
发帖数: 81
21
SWAN 做的很漂亮,只要两个输入!

【在 s******n 的大作中提到】
: void bstVisit(const node *p_node, int n)
: {
: if (!p_node || !n)
: return;
: bstVisit(p_node->p_right, n);
: n--;
: if (!n)
: printNode(p_node);
: bstVisit(p_node->p_left, n);
: }

z****h
发帖数: 164
22
请问什么是“LINDE LIST 两两互换。”?

【在 b******u 的大作中提到】
: 第一电面,美国大哥。
: 第二电面,印度MM。
: 第三电面,中国弟弟。悲剧。
: 死而无怨。
: 印度MM: 写 code: LINDE LIST 两两互换。
: 中国弟弟:写 code: BINARY SEARCH TREE 第五大的数。

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

这题我准备有时间的时候做一下。

【在 z****h 的大作中提到】
: 请问什么是“LINDE LIST 两两互换。”?
l*****a
发帖数: 14598
24
why not now?
at most 10 minutes

【在 p*****2 的大作中提到】
:
: 这题我准备有时间的时候做一下。

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

有TCO的比赛,不想分散注意力。而且调错闹钟了,很困。不过昨晚算法想了一下,感
觉有点不太简洁。

【在 l*****a 的大作中提到】
: why not now?
: at most 10 minutes

l*****a
发帖数: 14598
26
他的算法对吗?
举个例子
A
\
\
B
find the 2nd largest
you will call func(A,2)
that is func(B,2); n=1; func(null,1)
func(B,2) is func(null,2), n=1; func(null,1)
where can you get the result A?
我什么地方搞错了吗?

【在 b******u 的大作中提到】
: SWAN 做的很漂亮,只要两个输入!
p*****2
发帖数: 21240
27

你咋还这么积极呢?

【在 l*****a 的大作中提到】
: 他的算法对吗?
: 举个例子
: A
: \
: \
: B
: find the 2nd largest
: you will call func(A,2)
: that is func(B,2); n=1; func(null,1)
: func(B,2) is func(null,2), n=1; func(null,1)

l*****a
发帖数: 14598
28
这道题我一直不知道比较好的解法是什么。。。
有人提出来了,我正好学习一下。。
但是还没太看懂。。

【在 p*****2 的大作中提到】
:
: 你咋还这么积极呢?

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

累死了。脑子快崩溃了。这两天有时间再跟你研究这题。

【在 l*****a 的大作中提到】
: 这道题我一直不知道比较好的解法是什么。。。
: 有人提出来了,我正好学习一下。。
: 但是还没太看懂。。

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

回来讨论这题。你觉得上边大家给出的算法不够好,还是都不对呀?

【在 l*****a 的大作中提到】
: 这道题我一直不知道比较好的解法是什么。。。
: 有人提出来了,我正好学习一下。。
: 但是还没太看懂。。

相关主题
这道硬币找零题有好的DP解法么?请教个G题目
Lowest common ancestor of two nodes of Binary Tree面试的时候 binary tree的delete也要15分钟之内写完么?
回馈本版,新鲜店面,新题新气象问个二叉树删除结点的问题
进入JobHunting版参与讨论
b******u
发帖数: 81
31
C#改了一下。输入应该是 pointer. 改进后的结果是对的。
SWAN 做法的可取之处是只需要两个INPUT。 用n--,而不是 rank++;
static void bstVisit(Node p_node, ref int n)
{
if (p_node == null || n < 0 ) return;

bstVisit(p_node.right, ref n);
n--;
if (n == 0) System.Console.WriteLine(p_node.Num);

bstVisit(p_node.left, ref n);
}

【在 l*****a 的大作中提到】
: 他的算法对吗?
: 举个例子
: A
: \
: \
: B
: find the 2nd largest
: you will call func(A,2)
: that is func(B,2); n=1; func(null,1)
: func(B,2) is func(null,2), n=1; func(null,1)

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

如果用Java也没什么区别吧?

【在 b******u 的大作中提到】
: C#改了一下。输入应该是 pointer. 改进后的结果是对的。
: SWAN 做法的可取之处是只需要两个INPUT。 用n--,而不是 rank++;
: static void bstVisit(Node p_node, ref int n)
: {
: if (p_node == null || n < 0 ) return;
:
: bstVisit(p_node.right, ref n);
: n--;
: if (n == 0) System.Console.WriteLine(p_node.Num);
:

b******u
发帖数: 81
33
应该没区别.

【在 p*****2 的大作中提到】
:
: 如果用Java也没什么区别吧?

z****h
发帖数: 164
34
int n是传值得。这样写不对吧。。。

【在 s******n 的大作中提到】
: void bstVisit(const node *p_node, int n)
: {
: if (!p_node || !n)
: return;
: bstVisit(p_node->p_right, n);
: n--;
: if (!n)
: printNode(p_node);
: bstVisit(p_node->p_left, n);
: }

l*****a
发帖数: 14598
35
use reference is right

【在 b******u 的大作中提到】
: C#改了一下。输入应该是 pointer. 改进后的结果是对的。
: SWAN 做法的可取之处是只需要两个INPUT。 用n--,而不是 rank++;
: static void bstVisit(Node p_node, ref int n)
: {
: if (p_node == null || n < 0 ) return;
:
: bstVisit(p_node.right, ref n);
: n--;
: if (n == 0) System.Console.WriteLine(p_node.Num);
:

z****h
发帖数: 164
36
有区别。java 没有 pass by reference

【在 b******u 的大作中提到】
: 应该没区别.
z****h
发帖数: 164
37
我觉得java只能用static variable了。或者用parent指针。
请指正。
p*****2
发帖数: 21240
38

我的意思是如果用Java,那个方法也没变的更简洁

【在 z****h 的大作中提到】
: 有区别。java 没有 pass by reference
z****h
发帖数: 164
39
哦。难怪。误解大牛了。
p*****2
发帖数: 21240
40

import java.io.*;
import java.util.*;
public class test
{
public static void main(String[] args)
{
new test().run();
}
PrintWriter out = null;
void run()
{
Scanner in = new Scanner(System.in);
out = new PrintWriter(System.out);
int[] values = new int[]
{ 1, 4, 5, 6, 3 };
Node head = null;
Node prev = null;
for (int i : values)
{
Node node = new Node(i);
if (head == null)
head = node;
else
{
prev.next = node;
}
prev = node;
}
Print(head);
head = Switch(head);
Print(head);
out.close();
}
void Print(Node head)
{
while (head != null)
{
out.print(head.value + " ");
head = head.next;
}
out.println();
}
Node Switch(Node head)
{
Node prev = null;
Node p1 = null;
Node p2 = null;
while (true)
{
if (prev == null)
p1 = head;
else
p1 = prev.next;
if (p1 == null)
break;
p2 = p1.next;
if (p2 == null)
break;
p1.next = p2.next;
p2.next = p1;
if (prev == null)
head = p2;
else
prev.next = p2;
prev = p1;
}
return head;
}
}
class Node
{
int value;
Node next;
public Node(int v)
{
value = v;
}
}

【在 z****h 的大作中提到】
: 请问什么是“LINDE LIST 两两互换。”?
相关主题
问个二叉树删除结点的问题一道linked list编程题
一道题:2个BST,按大小顺序打印两棵树的所有节点这个check whether a binary tree is a BST or not
发现一个很恶心的基础问题题目: iterative binary tree post order traversal
进入JobHunting版参与讨论
p*****2
发帖数: 21240
41

用java返回一个值应该就可以了吧。

【在 z****h 的大作中提到】
: 我觉得java只能用static variable了。或者用parent指针。
: 请指正。

s********r
发帖数: 137
42
交换单链表中的相邻节点:
http://ideone.com/9Ln1K
z****h
发帖数: 164
43
不行吧。。。
给个实现?

【在 p*****2 的大作中提到】
:
: 用java返回一个值应该就可以了吧。

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

上边没有吗?

【在 z****h 的大作中提到】
: 不行吧。。。
: 给个实现?

z****h
发帖数: 164
45
上边的不对

【在 p*****2 的大作中提到】
:
: 上边没有吗?

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

import java.io.*;
import java.util.*;
public class test2
{
public static void main(String[] args) throws Exception
{
new test2().run();
}
PrintWriter out = null;
void run() throws Exception
{
Scanner in = new Scanner(System.in);
out = new PrintWriter(System.out);
Node node1 = new Node(1);
Node node4 = new Node(4);
Node node3 = new Node(3);
node3.left = node1;
node3.right = node4;
Node node6 = new Node(6);
Node node9 = new Node(9);
Node node8 = new Node(8);
node8.left = node6;
node8.right = node9;
Node root = new Node(5);
root.left = node3;
root.right = node8;
Find(root, 9, 0);
out.close();
}
int Find(Node node, int k, int c)
{
if (node == null)
return c;
c = Find(node.right, k, c);
c++;
if (c == k)
out.println(node.value);
return Find(node.left, k, c);
}
}
class Node
{
int value;
Node left;
Node right;
public Node(int v)
{
value = v;
}
}

【在 z****h 的大作中提到】
: 上边的不对
z****h
发帖数: 164
47
对的。多谢!

【在 p*****2 的大作中提到】
:
: import java.io.*;
: import java.util.*;
: public class test2
: {
: public static void main(String[] args) throws Exception
: {
: new test2().run();
: }
: PrintWriter out = null;

z****h
发帖数: 164
48
这样行吗?
还是只能算投机取巧?
private Node swap(Node head) {
Node curr = head;
while(curr != null && curr.next != null)
{
int tmp = curr.value;
curr.value = curr.next.value;
curr.next.value= tmp;
curr = curr.next.next;
}
return head;
}

【在 p*****2 的大作中提到】
:
: import java.io.*;
: import java.util.*;
: public class test2
: {
: public static void main(String[] args) throws Exception
: {
: new test2().run();
: }
: PrintWriter out = null;

z****h
发帖数: 164
49
这样应该不算投机了
private Node swapAdjancentNode(Node head) {
Node curr = head;
boolean isFirst = true;
Node pre = null;
while(curr != null && curr.next != null)
{
Node third = curr.next.next;
curr.next.next = curr;
if(isFirst)
{
head = curr.next;
isFirst = false;
}else
{
pre.next = curr.next;

}
curr.next = third;
pre = curr;
curr = third;
}
return head;
}

【在 z****h 的大作中提到】
: 这样行吗?
: 还是只能算投机取巧?
: private Node swap(Node head) {
: Node curr = head;
: while(curr != null && curr.next != null)
: {
: int tmp = curr.value;
: curr.value = curr.next.value;
: curr.next.value= tmp;
: curr = curr.next.next;

1 (共1页)
进入JobHunting版参与讨论
相关主题
感觉今天结结实实被烙印阴了一道题:2个BST,按大小顺序打印两棵树的所有节点
Populating Next Right Pointers in Each Node II发现一个很恶心的基础问题
这道硬币找零题有好的DP解法么?一道linked list编程题
Lowest common ancestor of two nodes of Binary Tree这个check whether a binary tree is a BST or not
回馈本版,新鲜店面,新题新气象题目: iterative binary tree post order traversal
请教个G题目reverse链表
面试的时候 binary tree的delete也要15分钟之内写完么?mirror 一个binary tree, 用non-recursive解法怎么做
问个二叉树删除结点的问题"Hacking a G Interview"怎么有这样低级错?
相关话题的讨论汇总
话题: node话题: null话题: head话题: int话题: return