由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问个微软面试题
相关主题
divide array into two, sum of difference is min in O(N)Amazon 面试题
问个面试题问一个面试题
问个google面试题贡献两个Amazon的电话面试题
sum of set difference minmerge k个数组怎样的方法好?
请教一个题目请教一个面试题
微软一个面试题问个Array Puzzle题
一道面试题问个算法题
谁还记得这道面试题吗?问个简单算法题
相关话题的讨论汇总
话题: a1话题: minimum话题: arrays话题: find话题: here
进入JobHunting版参与讨论
1 (共1页)
B*******1
发帖数: 2454
1
Given n arrays, find n number such that sum of their differences is minimum.
For e.g. if there are three arrays
A = {4, 10, 15, 20}
B = {1, 13, 29}
C = {5, 14, 28}
find three numbers a, b, c such that |a-b| + |b-c| + |c-a| is minimum. Here
the answer is a = 15, b = 13, and c = 14
f*******t
发帖数: 7549
2
divide&conquer?
我只是猜测,想不出具体算法
g*****i
发帖数: 2162
3
O(n)吧,|a-b| + |b-c| + |c-a| = (Max(abc)-Min(abc))*2,然后每个array排序后一个
pointer,最小的那组移动.
B*******1
发帖数: 2454
4
可以具体说说嘛?
譬如题目里面说的那个例子。
thanks
d***n
发帖数: 65
5
|a-b| + |b-c| + |c-a| = (Max(abc)-Min(abc))*2对n=3成立
用这个思路,一般情况还是需要O(n)的时间来计算差和。
先对每个array排序时间O(klogk), k是array平均长度。
然后根据每个array最小的数对所有array排序时间O(nlogn)。
scan的时候要维持所有array按当前数的大小排序,每scan一个数需要logn时间调整排序(binary search or heap),计算新的差和O(n), scan完所有的数需要O(nk)个操作。
最终时间是O(nklogk + n^2klogn) = O(nk(logk+nlogn))。
不知有没有更快的方法。

【在 g*****i 的大作中提到】
: O(n)吧,|a-b| + |b-c| + |c-a| = (Max(abc)-Min(abc))*2,然后每个array排序后一个
: pointer,最小的那组移动.

d********y
发帖数: 2114
6
这个sum of difference怎么定义?
默认是排序后计算的话,这个做法是对的。

【在 d***n 的大作中提到】
: |a-b| + |b-c| + |c-a| = (Max(abc)-Min(abc))*2对n=3成立
: 用这个思路,一般情况还是需要O(n)的时间来计算差和。
: 先对每个array排序时间O(klogk), k是array平均长度。
: 然后根据每个array最小的数对所有array排序时间O(nlogn)。
: scan的时候要维持所有array按当前数的大小排序,每scan一个数需要logn时间调整排序(binary search or heap),计算新的差和O(n), scan完所有的数需要O(nk)个操作。
: 最终时间是O(nklogk + n^2klogn) = O(nk(logk+nlogn))。
: 不知有没有更快的方法。

r*******y
发帖数: 1081
7
Is this true?
asume a1, a2, a3, a4, a5, a6..., an are decreasing, then
|a1 -a2| + |a2 - a3| + ... + |an - a1| = 2*(a1 - an).
Now assume they are 1, -1, 1, -1, 1, -1, ...., 1, -1 which have
2k numbers and n = 2k. At this time the sum should be 2n =
n*(Max - MIN)
So we don't have uniform equation for |a1 - a2| + ... + |an - a1| ?

【在 g*****i 的大作中提到】
: O(n)吧,|a-b| + |b-c| + |c-a| = (Max(abc)-Min(abc))*2,然后每个array排序后一个
: pointer,最小的那组移动.

d***n
发帖数: 65
8
Good point. guangyi's equation only applies to n = 3 case.
d***n
发帖数: 65
9
试一下求四个数之间差和就明白为什么不对了。
c*********t
发帖数: 2921
10
这道题是什么意思?
1. 是从每个array个各取一个数,sum of their differences is minimum?
2. 还是这 n 个数,可以多个从某一个array里取?如果是这种的话,就把所有的数组
放在一起排序,然后scan一边,就可以了。
谢谢!

minimum.
Here

【在 B*******1 的大作中提到】
: Given n arrays, find n number such that sum of their differences is minimum.
: For e.g. if there are three arrays
: A = {4, 10, 15, 20}
: B = {1, 13, 29}
: C = {5, 14, 28}
: find three numbers a, b, c such that |a-b| + |b-c| + |c-a| is minimum. Here
: the answer is a = 15, b = 13, and c = 14

i*****e
发帖数: 63
11
Good point.
The first thing came into my mind is to find a circle with minimal radius to
include n points.
'Cos all the points are on a single line, I believe the basic idea would be
similar to yours

【在 r*******y 的大作中提到】
: Is this true?
: asume a1, a2, a3, a4, a5, a6..., an are decreasing, then
: |a1 -a2| + |a2 - a3| + ... + |an - a1| = 2*(a1 - an).
: Now assume they are 1, -1, 1, -1, 1, -1, ...., 1, -1 which have
: 2k numbers and n = 2k. At this time the sum should be 2n =
: n*(Max - MIN)
: So we don't have uniform equation for |a1 - a2| + ... + |an - a1| ?

1 (共1页)
进入JobHunting版参与讨论
相关主题
问个简单算法题请教一个题目
问个array in place operation的题目微软一个面试题
问个算法题8一道面试题
问个老问题 Longest palindrome in a string谁还记得这道面试题吗?
divide array into two, sum of difference is min in O(N)Amazon 面试题
问个面试题问一个面试题
问个google面试题贡献两个Amazon的电话面试题
sum of set difference minmerge k个数组怎样的方法好?
相关话题的讨论汇总
话题: a1话题: minimum话题: arrays话题: find话题: here