Redian新闻
>
向大家请教一个ebay付款问题, 非常感谢!
avatar
向大家请教一个ebay付款问题, 非常感谢!# PhotoGear - 摄影器材
h*e
1
一道常见的面试题是print binary tree level by level。
现在有一道反过来的题目,就是给定每一层的结点,构造出
BST来。例如给出以下的vector >:
5
4 8
2 7 9
3 10
要求构造出相应的BST:
5
4 8
2 7 9
3 10
我的想法是可以把输入看作是一个一维的vector,一个个结点
地插入,这样可以得到相应的BST,复杂度是O(NlogN)吧。
问题是这种做法没有利用给出的结点已经分好层的特点,每次都从
根节点开始,似乎不是最有效的。
请问还有更好的办法吗?
avatar
r*f
2
如果在ebay里, make best offer后, 卖家也同意了,那还能不能pay的时候调用微软
cashback呢?
我bing出8%的图像后,搜索item number 再点 pay 后, 出现了“1 item(s) cannot
be paid because either unpaid
item case(s) were closed or transaction was canceled.” 并且页面右下角无微
软cashback金额, 只有一个ebucks的
金额。
谢谢各位高人指点!
谢谢啊
avatar
p*2
3
recursion
avatar
S*t
4
不能。bing cashback 只适用 BUY IT NOW
BAOZI

cannot

【在 r*****f 的大作中提到】
: 如果在ebay里, make best offer后, 卖家也同意了,那还能不能pay的时候调用微软
: cashback呢?
: 我bing出8%的图像后,搜索item number 再点 pay 后, 出现了“1 item(s) cannot
: be paid because either unpaid
: item case(s) were closed or transaction was canceled.” 并且页面右下角无微
: 软cashback金额, 只有一个ebucks的
: 金额。
: 谢谢各位高人指点!
: 谢谢啊

avatar
h*e
5
二爷真的是recursion修炼到一字师的地步了。:)
Recursion怎么个做法?

【在 p*****2 的大作中提到】
: recursion
avatar
t*3
6
let seller list it again with new price

cannot

【在 r*****f 的大作中提到】
: 如果在ebay里, make best offer后, 卖家也同意了,那还能不能pay的时候调用微软
: cashback呢?
: 我bing出8%的图像后,搜索item number 再点 pay 后, 出现了“1 item(s) cannot
: be paid because either unpaid
: item case(s) were closed or transaction was canceled.” 并且页面右下角无微
: 软cashback金额, 只有一个ebucks的
: 金额。
: 谢谢各位高人指点!
: 谢谢啊

avatar
n*n
7
merge sorted的list啊

【在 h****e 的大作中提到】
: 一道常见的面试题是print binary tree level by level。
: 现在有一道反过来的题目,就是给定每一层的结点,构造出
: BST来。例如给出以下的vector >:
: 5
: 4 8
: 2 7 9
: 3 10
: 要求构造出相应的BST:
: 5
: 4 8

avatar
h*e
8
这个,不行吧,最后生成的是2->3->4->5->...,不是树吧。

【在 n****n 的大作中提到】
: merge sorted的list啊
avatar
p*2
9

5
4 8
2 7 9
3 10
我的想法是这样。
5是root
4是left tree
8是right tree
到4的时候数值范围是 Integer.MinValue - 5
左tree的范围 Integer,MinValue - 4
右tree的范围 4-5
这样你就知道2是左tree,这样recursion就可以了。

【在 h****e 的大作中提到】
: 二爷真的是recursion修炼到一字师的地步了。:)
: Recursion怎么个做法?

avatar
h*e
10
这样你是不是需要maintain每一层的所有的结点呢?可能空间要求就
上去了吧。
我的做法如下。这样写的好处是面试时可以写得出来,但是就是不知道
复杂度是不是最优了:
// it is also easy to write an iterative insertion function
void insert_node(Node*& root, int v) {
if (root==0) {
root = new Node(v);
return;
}
if (root->data>v) {
insert_node(root->left, v);
} else {
insert_node(root->right, v);
}
}

Node* construct_tree(vector > nodes)
{
Node* root = 0;
for (int i=0; iconst vector& numbers = nodes[i];
for (int j=0; jinsert_node(root, numbers[j]);
}
}
return root;

}

【在 p*****2 的大作中提到】
:
: 5
: 4 8
: 2 7 9
: 3 10
: 我的想法是这样。
: 5是root
: 4是left tree
: 8是right tree
: 到4的时候数值范围是 Integer.MinValue - 5

avatar
p*2
11

怎么maintain?你是说stack的空间?如果不用recursion, BFS也可以。但是时间肯定
不能超过O(n)吧。

【在 h****e 的大作中提到】
: 这样你是不是需要maintain每一层的所有的结点呢?可能空间要求就
: 上去了吧。
: 我的做法如下。这样写的好处是面试时可以写得出来,但是就是不知道
: 复杂度是不是最优了:
: // it is also easy to write an iterative insertion function
: void insert_node(Node*& root, int v) {
: if (root==0) {
: root = new Node(v);
: return;
: }

avatar
h*e
12
二爷有时间的话发一段code吧,我不理解如何在知道4,8以及它们的
子树的取值范围以后处理2,7,9的。

【在 p*****2 的大作中提到】
:
: 怎么maintain?你是说stack的空间?如果不用recursion, BFS也可以。但是时间肯定
: 不能超过O(n)吧。

avatar
w*x
13
top down recursion, recursion下来的函数要传递range
avatar
p*2
14
写了一个BFS的。
class Node
{
int value;
Node left;
Node right;
public Node(int v)
{
value = v;
}
}
class Ele
{
int min;
int max;
Node ref;
public Ele(int _min, int _max, Node _ref)
{
min = _min;
max = _max;
ref = _ref;
}
}
Node convert(ArrayList> tree)
{
Queue queue = new LinkedList();
Node root = new Node(tree.get(0).get(0));
queue.add(new Ele(Integer.MIN_VALUE, Integer.MAX_VALUE, root));
int level = 1;
int count = 1;
int i = 0;
while (!queue.isEmpty() && level < tree.size())
{
ArrayList al = tree.get(level);
Ele ele = queue.poll();
if (i < al.size() && al.get(i) >= ele.min
&& al.get(i) <= ele.ref.value)
{
Node left = new Node(al.get(i));
ele.ref.left = left;
queue.add(new Ele(ele.min, ele.ref.value, left));
i++;
}
if (i < al.size() && al.get(i) <= ele.max
&& al.get(i) > ele.ref.value)
{
Node right = new Node(al.get(i));
ele.ref.right = right;
queue.add(new Ele(ele.ref.value, ele.max, right));
i++;
}
count--;
if (count == 0)
{
level++;
count = queue.size();
i = 0;
}
}
return root;
}
avatar
f*0
15

我也觉得是,然后判断每个range只能放一个下一层的元素,如果一个range能包含多于
一个的下一层元素,或者是某个元素无法放入紧接着的range,都返回错误

【在 w****x 的大作中提到】
: top down recursion, recursion下来的函数要传递range
avatar
w*x
16

恩, recursion前后要还原状态, 用掉的node从vector里erase, recursion返回后再插
入, 没时间写, 以后再看

【在 f****0 的大作中提到】
:
: 我也觉得是,然后判断每个range只能放一个下一层的元素,如果一个range能包含多于
: 一个的下一层元素,或者是某个元素无法放入紧接着的range,都返回错误

avatar
C*U
17
只要O(n)就可以了
因为你每次插入一层只需要检查一遍上一层的数字大小就能把下一层的插入
那么就是把所有的节点都走一边 就是O(n)

【在 h****e 的大作中提到】
: 一道常见的面试题是print binary tree level by level。
: 现在有一道反过来的题目,就是给定每一层的结点,构造出
: BST来。例如给出以下的vector >:
: 5
: 4 8
: 2 7 9
: 3 10
: 要求构造出相应的BST:
: 5
: 4 8

avatar
d*e
18
能不能看作是insert a value into a bst?限制的条件是它所在input的level要跟插入
后的level一致,否则throw exception.

【在 h****e 的大作中提到】
: 一道常见的面试题是print binary tree level by level。
: 现在有一道反过来的题目,就是给定每一层的结点,构造出
: BST来。例如给出以下的vector >:
: 5
: 4 8
: 2 7 9
: 3 10
: 要求构造出相应的BST:
: 5
: 4 8

avatar
r*e
19
每一层的数字应该是递增的,这样找同一层的就容易了。
但是好像还得存上一层的节点和root的值,否则插入时
不好判断放在哪。怎么让这块更优化还没想出好办法。

【在 h****e 的大作中提到】
: 一道常见的面试题是print binary tree level by level。
: 现在有一道反过来的题目,就是给定每一层的结点,构造出
: BST来。例如给出以下的vector >:
: 5
: 4 8
: 2 7 9
: 3 10
: 要求构造出相应的BST:
: 5
: 4 8

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