由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问Thomson Reuters两道算法题
相关主题
C++ Q93 - Q95thomson Reuters onsite求指导
Thomson Reuter每家公司都能用E-verify吗?有人面过Thomson Reuters吗?
问个stl的iterator问题CapitalOne(Richmond, VA)和Thomson Reuters(Eagan, Minnesota)到底去哪个?
C++ Q58: size of pointer (Bloomberg)请问有人能推Thomson Reuters吗?多谢!
菜鸟问个C++的pointer问题求Thomson Reuters内推
在电脑上直接写程序[急]Uber offer
请问有人知道Thomson Reuters的年薪待遇一般是多少吗?发个Thomson Reuters Scientist的职位
Thomson Reuters这个公司怎么样Non-recursive permutation
相关话题的讨论汇总
话题: int话题: balls话题: color话题: pts话题: sizeof
进入JobHunting版参与讨论
1 (共1页)
b*******h
发帖数: 53
1
1. 一个array当中,每个element都是一个带一种颜色的小球。有20种颜色的选择。排
序,将相同颜色的小球放在一起。 要求linear time and in-place.
in-place, 我的理解就是不能再用一个array装重新的排序的小球。
2.如何判断两个矩形overlap. 用最少的判断条件。
这道题是一道经典题吧,隐约好像以前见过。
自己给出的方案: 分别判断两边有没有overlap,就是x方向和y方向的线段有没有重叠
的部分,如果两个方向都有的话,两个矩形overlap。
不知道有没有其他方法。
r*******y
发帖数: 1081
2
1, construct a hash table of size 20 firstly to find the interval of
one color balls in the sorted array ?

【在 b*******h 的大作中提到】
: 1. 一个array当中,每个element都是一个带一种颜色的小球。有20种颜色的选择。排
: 序,将相同颜色的小球放在一起。 要求linear time and in-place.
: in-place, 我的理解就是不能再用一个array装重新的排序的小球。
: 2.如何判断两个矩形overlap. 用最少的判断条件。
: 这道题是一道经典题吧,隐约好像以前见过。
: 自己给出的方案: 分别判断两边有没有overlap,就是x方向和y方向的线段有没有重叠
: 的部分,如果两个方向都有的话,两个矩形overlap。
: 不知道有没有其他方法。

g**e
发帖数: 6127
3
1. http://en.wikipedia.org/wiki/Dutch_national_flag_problem
2. check programing interview exposed

【在 b*******h 的大作中提到】
: 1. 一个array当中,每个element都是一个带一种颜色的小球。有20种颜色的选择。排
: 序,将相同颜色的小球放在一起。 要求linear time and in-place.
: in-place, 我的理解就是不能再用一个array装重新的排序的小球。
: 2.如何判断两个矩形overlap. 用最少的判断条件。
: 这道题是一道经典题吧,隐约好像以前见过。
: 自己给出的方案: 分别判断两边有没有overlap,就是x方向和y方向的线段有没有重叠
: 的部分,如果两个方向都有的话,两个矩形overlap。
: 不知道有没有其他方法。

b*******h
发帖数: 53
4
thanks, great help.

【在 g**e 的大作中提到】
: 1. http://en.wikipedia.org/wiki/Dutch_national_flag_problem
: 2. check programing interview exposed

g**e
发帖数: 6127
5
a little more info for q2:
using dot product is easier than checking vertices I think
http://stackoverflow.com/questions/115426/algorithm-to-detect-i
http://en.wikipedia.org/wiki/Separating_axis_theorem

【在 b*******h 的大作中提到】
: thanks, great help.
f****4
发帖数: 1359
6
q1 难道要多次调用Dutch_national_flag_problem?

【在 g**e 的大作中提到】
: 1. http://en.wikipedia.org/wiki/Dutch_national_flag_problem
: 2. check programing interview exposed

g**e
发帖数: 6127
7
理论上说是可以,但是代码会非常复杂
有什么更好的idea吗?

【在 f****4 的大作中提到】
: q1 难道要多次调用Dutch_national_flag_problem?
g***s
发帖数: 3811
8
no.
scan once, use 20 variables to count each color. (n)
Then use 20 pointers and in-place swap to scan. (n*2) -- similar with the
algo to swap k to kth. but here swap k to k-th block.
space O(20)

【在 f****4 的大作中提到】
: q1 难道要多次调用Dutch_national_flag_problem?
g**********y
发帖数: 14569
9
代码不复杂吧。反正固定20种颜色,每种都往头上换,不停挪指针,复杂度还是O(N)。

【在 g**e 的大作中提到】
: 理论上说是可以,但是代码会非常复杂
: 有什么更好的idea吗?

s*****y
发帖数: 897
10
我还以为不可以申请额外空间呢。

【在 g***s 的大作中提到】
: no.
: scan once, use 20 variables to count each color. (n)
: Then use 20 pointers and in-place swap to scan. (n*2) -- similar with the
: algo to swap k to kth. but here swap k to k-th block.
: space O(20)

相关主题
在电脑上直接写程序thomson Reuters onsite求指导
请问有人知道Thomson Reuters的年薪待遇一般是多少吗?有人面过Thomson Reuters吗?
Thomson Reuters这个公司怎么样CapitalOne(Richmond, VA)和Thomson Reuters(Eagan, Minnesota)到底去哪个?
进入JobHunting版参与讨论
g***s
发帖数: 3811
11
O(20), can be thought as O(1).
any algo needs extra variables.

【在 s*****y 的大作中提到】
: 我还以为不可以申请额外空间呢。
g**e
发帖数: 6127
12
不得20个case switch吗

【在 g**********y 的大作中提到】
: 代码不复杂吧。反正固定20种颜色,每种都往头上换,不停挪指针,复杂度还是O(N)。
g**********y
发帖数: 14569
13
颜色应该存在给定数组里,可以假设已经排好序了。我想这些都是枝节问题,面试官不
在乎的。

【在 g**e 的大作中提到】
: 不得20个case switch吗
f****4
发帖数: 1359
14
抛个没有count的;一次写对还是有难度的
grass的count的办法能简化代码
#include
int k = 0;
int pts[k+1]; //pts[0] for color 1; pts[k-1] for color k; pts[k] is the
current index in balls
void printArray(int *arr, int length)
{
for(int i = 0; i < length; i++)
printf("%d,",arr[i]);
printf("\n");
}
void KquickSortPartition(int *arr, int length)
{
if (arr == NULL || length == 0 || k <= 0) return;
printArray(arr, length);
for (int i = 0; i < k+1; i++)
pts[i] = 0;
int ball;
int color;
while (pts[k]< length)
{
// current color
color = arr[pts[k]];
for (int j = k; j > color; j--)
{
ball = arr[pts[j]];
arr[pts[j]] = arr[pts[j-1]];
arr[pts[j-1]] = ball;
}
for (int j = color; j <= k; j++)
pts[j]+=1;
// printArray(pts, k+1);
}
printArray(arr, length);
printf("\n");
}
int main ()
{
k = 4;
int balls1[] = {1,1,2,4,1,2,1,2,4,4,4,2,3,4,3,4,3,4,2,3,4,2,3,3,4,1};
KquickSortPartition(balls1, sizeof(balls1)/sizeof(int));
int balls2[] = {3,3,3,3,3,1,1,1,4,4,4,4};
KquickSortPartition(balls2, sizeof(balls2)/sizeof(int));
int balls3[] = {1,1,1};
KquickSortPartition(balls3, sizeof(balls3)/sizeof(int));
int balls4[] = {4,4,4};
KquickSortPartition(balls4, sizeof(balls4)/sizeof(int));
int balls5[] = {1,2,3,4,1,2,3,4,1,2,3,4};
KquickSortPartition(balls5, sizeof(balls5)/sizeof(int));
k = 1;
int balls6[] = {1,1,1,1,1};
KquickSortPartition(balls6, sizeof(balls6)/sizeof(int));
}
d*******d
发帖数: 2050
15
我认为用hash数个数再放回去是正解.

【在 r*******y 的大作中提到】
: 1, construct a hash table of size 20 firstly to find the interval of
: one color balls in the sorted array ?

g***s
发帖数: 3811
16
This codes are not O(N).

【在 f****4 的大作中提到】
: 抛个没有count的;一次写对还是有难度的
: grass的count的办法能简化代码
: #include
: int k = 0;
: int pts[k+1]; //pts[0] for color 1; pts[k-1] for color k; pts[k] is the
: current index in balls
: void printArray(int *arr, int length)
: {
: for(int i = 0; i < length; i++)
: printf("%d,",arr[i]);

d*******d
发帖数: 2050
17
第二题可没说这两矩形平行于坐标轴阿

【在 b*******h 的大作中提到】
: 1. 一个array当中,每个element都是一个带一种颜色的小球。有20种颜色的选择。排
: 序,将相同颜色的小球放在一起。 要求linear time and in-place.
: in-place, 我的理解就是不能再用一个array装重新的排序的小球。
: 2.如何判断两个矩形overlap. 用最少的判断条件。
: 这道题是一道经典题吧,隐约好像以前见过。
: 自己给出的方案: 分别判断两边有没有overlap,就是x方向和y方向的线段有没有重叠
: 的部分,如果两个方向都有的话,两个矩形overlap。
: 不知道有没有其他方法。

g***s
发帖数: 3811
18
public class ColorBalls {
public static void arrange(int[] balls, int colorNum){
int[] count = new int[colorNum];
int[] pointers = new int[colorNum];
//count color
for (int color : balls) count[color]++;
//set the pointers
for (int i=0;i pointers[i+1] += pointers[i] + count[i];
}
int currentColor = 0;
int c = count[currentColor];
for (int pos=0;pos if (c==0){
c = count[++currentColor];
continue;
}
if (balls[pos]!=currentColor){
swap(balls, pos, pointers[balls[pos]]++);
} else {
pos++;c--;
}
}
}
private static void swap(int[] balls, int p1, int p2) {
int t = balls[p1];
balls[p1] = balls[p2];
balls[p2] = t;
}
public static void main(String[] args) {
final int N = 100;
final int COLOR_NUM = 20;
int[] balls = new int[N];
Random random = new Random() ;
for (int i=0;i random.nextInt(COLOR_NUM);
arrange(balls,COLOR_NUM);
System.out.println(Arrays.toString(balls));
}
}

the

【在 g***s 的大作中提到】
: no.
: scan once, use 20 variables to count each color. (n)
: Then use 20 pointers and in-place swap to scan. (n*2) -- similar with the
: algo to swap k to kth. but here swap k to k-th block.
: space O(20)

g***s
发帖数: 3811
19
check gate's posts.

【在 d*******d 的大作中提到】
: 第二题可没说这两矩形平行于坐标轴阿
f****4
发帖数: 1359
20
这里最坏是O(kN)
k=20的时候,不能认为是 O(N)?

【在 g***s 的大作中提到】
: This codes are not O(N).
相关主题
请问有人能推Thomson Reuters吗?多谢!发个Thomson Reuters Scientist的职位
求Thomson Reuters内推Non-recursive permutation
[急]Uber offerrecursive中该用reference 还是普通变量传递?
进入JobHunting版参与讨论
g***s
发帖数: 3811
21
oh. yes, you are right.
but we can finish it in O(3*N).

【在 f****4 的大作中提到】
: 这里最坏是O(kN)
: k=20的时候,不能认为是 O(N)?

f****4
发帖数: 1359
22
恩,用count是简单很多
我那个是上次看到有人给问到类似问题,但要求in-place, O(N)并且不允许用count的
办法,才写的

【在 g***s 的大作中提到】
: oh. yes, you are right.
: but we can finish it in O(3*N).

g**********y
发帖数: 14569
23
如果用count的话,count完为什么不直接赋值?反正都是整数。
g***s
发帖数: 3811
24
Since it could be a Node inlcuding other fields.

【在 g**********y 的大作中提到】
: 如果用count的话,count完为什么不直接赋值?反正都是整数。
d*******d
发帖数: 2050
25
其实你那个和count是一码事,只不过count的内容变了一点而已.

【在 f****4 的大作中提到】
: 恩,用count是简单很多
: 我那个是上次看到有人给问到类似问题,但要求in-place, O(N)并且不允许用count的
: 办法,才写的

f****4
发帖数: 1359
26
你是指都用了k个指针的插入?
count直接把每个指针所在的位置放好了
我的k个指针都是从0开始的

【在 d*******d 的大作中提到】
: 其实你那个和count是一码事,只不过count的内容变了一点而已.
w*****3
发帖数: 101
27
counting 以后直接填似乎简单一点
int[] cntAry = new int[21];
public int[] solve(int[] bary) {
for (int v : bary) {
cntAry[v]++;
}
int tmp = 0, total = 0;

for (int i = 0; i < cntAry.length; ++i) {
tmp = cntAry[i];
cntAry[i] = total;
total += tmp;
}
for(int i = 0; i< cntAry.length - 1; ++i){
for(int j = cntAry[i]; j < cntAry[i+1]; ++j){
bary[j] = i;
}
}

return bary;
}
g***s
发帖数: 3811
28
This is not general solution,since the ball Node could have more fields.

【在 w*****3 的大作中提到】
: counting 以后直接填似乎简单一点
: int[] cntAry = new int[21];
: public int[] solve(int[] bary) {
: for (int v : bary) {
: cntAry[v]++;
: }
: int tmp = 0, total = 0;
:
: for (int i = 0; i < cntAry.length; ++i) {
: tmp = cntAry[i];

w*****3
发帖数: 101
29
I see
1 (共1页)
进入JobHunting版参与讨论
相关主题
Non-recursive permutation菜鸟问个C++的pointer问题
recursive中该用reference 还是普通变量传递?在电脑上直接写程序
打印从根到叶子节点所有路径的问题请问有人知道Thomson Reuters的年薪待遇一般是多少吗?
想成为嵌入式程序员应知道的0x10个基本问题 zzThomson Reuters这个公司怎么样
C++ Q93 - Q95thomson Reuters onsite求指导
Thomson Reuter每家公司都能用E-verify吗?有人面过Thomson Reuters吗?
问个stl的iterator问题CapitalOne(Richmond, VA)和Thomson Reuters(Eagan, Minnesota)到底去哪个?
C++ Q58: size of pointer (Bloomberg)请问有人能推Thomson Reuters吗?多谢!
相关话题的讨论汇总
话题: int话题: balls话题: color话题: pts话题: sizeof