由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 攒人品发Google onsite面经
相关主题
一道G面经贡献个题
shorten url 单机解法 抛砖引玉请教一道G家面试题
求助:一道careercup的算法题leetcode plus one 书上答案是不是错了?
两道算法题job opportunity in AMEX Phoenix
问两道数字题这句python什么意思
问一道题discuss an array rearrange question
问个google面试题问个amazon面试题
问个Amazon面试题问一个题目,面试时我没有搞出来
相关话题的讨论汇总
话题: digits话题: int话题: blockstart话题: sum话题: blocksize
进入JobHunting版参与讨论
1 (共1页)
Z**********4
发帖数: 528
1
session 1一个class {int a, bool c, int b} 里面每个variable所占的空间都不同
,比如a,b是int 所以分别占4byte. bool的c只占1byte。还有其他变量,可能占8bytes
或者16bytes。都是2的次方就是。
问题是写一个程序让他们可以很好的被放到8byte为单位的block里面去然后空间不会浪
费。
比如如果是 就按照a, c, b的话它一共要占12个byte。因为当把a和c放到一个block的
时候就会浪费一些空间。
所以最好摆成a,b,c这样的话更合理。占9个byte。剩下的空间还可以放一些小的
object。
其实这个就是用排序,然后从大的变量依次放进block。
有个followup的问题就是:因为我不想过多移动这些变量,所以怎么才能设计一个算法
所需要移动的object最少。
比如如果变量的size一次是4, 4, 1, 1, 8, 8, 1, 1最好的排法是4, 4, 8, 8, 1, 1,
1, 1.而不是8 8 4 4 1 1 1 1因为前一种所需要移动的cost最小。这个没想出来了。。
应该用divide and conquer?
session 2: 1. 设计算法找出平面上点的convex hull 不用写code(不熟。讨论下想
出,但是应该悲剧)
2. code 插入元素到max heap。
session 3: 1. 一个bit的stream, 每次读取6个bit。转化成char。
2. 很多URL,找到所有distinct的URL。(分布式计算)
session 4: 写出长度小于N的所有旋转对称数。
例子 689 顺时针旋转180度还是689
递归。也可以dp。
session 5: 设计数据结构,满足insert,delete,getRandom都是O(1)
就是这样了。结果估计不咋地。
anyway move on。
希望后面的面试结果不错。
y***n
发帖数: 1594
2
感觉看着简单,写好不容易。
Z**********4
发帖数: 528
3
不能同意更多。
lc也刷了几遍了。
但是写那个bit流的时候,输入是一个char array
然后我在那里想办法算offset做位操作,最后code竟然没有finish。
然后我就释然了。你懂的。

【在 y***n 的大作中提到】
: 感觉看着简单,写好不容易。
G******n
发帖数: 572
4
mark。
session5 应该是什么数据结构?谢谢
y***n
发帖数: 1594
5
我也版上看了一段时间了,G的面试题最有质量,靠刷题还是比较难的,要基础好。

【在 Z**********4 的大作中提到】
: 不能同意更多。
: lc也刷了几遍了。
: 但是写那个bit流的时候,输入是一个char array
: 然后我在那里想办法算offset做位操作,最后code竟然没有finish。
: 然后我就释然了。你懂的。

v***o
发帖数: 287
6
1. 变量的值在{1,4,8,16} 中间,直接group就可,不需排序,找出相同值连续最多
的同一值group,把其他零碎的移过来即可。

8bytes

【在 Z**********4 的大作中提到】
: session 1一个class {int a, bool c, int b} 里面每个variable所占的空间都不同
: ,比如a,b是int 所以分别占4byte. bool的c只占1byte。还有其他变量,可能占8bytes
: 或者16bytes。都是2的次方就是。
: 问题是写一个程序让他们可以很好的被放到8byte为单位的block里面去然后空间不会浪
: 费。
: 比如如果是 就按照a, c, b的话它一共要占12个byte。因为当把a和c放到一个block的
: 时候就会浪费一些空间。
: 所以最好摆成a,b,c这样的话更合理。占9个byte。剩下的空间还可以放一些小的
: object。
: 其实这个就是用排序,然后从大的变量依次放进block。

U***A
发帖数: 849
7
第一题是一定要从大到小排序?是不是只要分两端就可以,4byte及以上的排在前面,
2byte及1byte的排在后半段(后半段还是按大小排序。)
有点像quick sort。
r*******e
发帖数: 971
8
这是校招还是社招??
U***A
发帖数: 849
9
http://stackoverflow.com/questions/5682218/data-structure-inser

【在 G******n 的大作中提到】
: mark。
: session5 应该是什么数据结构?谢谢

r*******e
发帖数: 971
10
session 3 的第二题怎么用分布式计算 解决呢?

【在 y***n 的大作中提到】
: 我也版上看了一段时间了,G的面试题最有质量,靠刷题还是比较难的,要基础好。
相关主题
问一道题贡献个题
问个google面试题请教一道G家面试题
问个Amazon面试题leetcode plus one 书上答案是不是错了?
进入JobHunting版参与讨论
G******n
发帖数: 572
11
靠谱!

【在 U***A 的大作中提到】
: http://stackoverflow.com/questions/5682218/data-structure-inser
j**********3
发帖数: 3211
12
你最近面很多阿
t*******i
发帖数: 4960
13
直接吐血倒地。
楼主什么背景啊,这些题一出我直接投降。

8bytes

【在 Z**********4 的大作中提到】
: session 1一个class {int a, bool c, int b} 里面每个variable所占的空间都不同
: ,比如a,b是int 所以分别占4byte. bool的c只占1byte。还有其他变量,可能占8bytes
: 或者16bytes。都是2的次方就是。
: 问题是写一个程序让他们可以很好的被放到8byte为单位的block里面去然后空间不会浪
: 费。
: 比如如果是 就按照a, c, b的话它一共要占12个byte。因为当把a和c放到一个block的
: 时候就会浪费一些空间。
: 所以最好摆成a,b,c这样的话更合理。占9个byte。剩下的空间还可以放一些小的
: object。
: 其实这个就是用排序,然后从大的变量依次放进block。

Z**********4
发帖数: 528
14
工作了一段时间。
我也投降啊。。

【在 t*******i 的大作中提到】
: 直接吐血倒地。
: 楼主什么背景啊,这些题一出我直接投降。
:
: 8bytes

h*******e
发帖数: 1377
15
convex hull 旋转卡壳之类的不用模板根本不可能保证没bug~~

【在 Z**********4 的大作中提到】
: 不能同意更多。
: lc也刷了几遍了。
: 但是写那个bit流的时候,输入是一个char array
: 然后我在那里想办法算offset做位操作,最后code竟然没有finish。
: 然后我就释然了。你懂的。

h*******e
发帖数: 1377
16
插入到max heap是要求不用stl 那种手工实现么。。昨天还和一google 的同学讨论呢
, 他说topk min heap不用自己手工写, 看来没有什么是绝对的。
Z**********4
发帖数: 528
17
你这个是可以的。



【在 U***A 的大作中提到】
: 第一题是一定要从大到小排序?是不是只要分两端就可以,4byte及以上的排在前面,
: 2byte及1byte的排在后半段(后半段还是按大小排序。)
: 有点像quick sort。

Z**********4
发帖数: 528
18
只用实现插入。
用一个数组表示heap。
几行代码就可以搞定。

【在 h*******e 的大作中提到】
: 插入到max heap是要求不用stl 那种手工实现么。。昨天还和一google 的同学讨论呢
: , 他说topk min heap不用自己手工写, 看来没有什么是绝对的。

Z**********4
发帖数: 528
19
我觉得大概思路就是先把相同的url想办法放到同一个server上面。利用类似
consistent hashing的办法。
然后每个server计算distinct的url。再汇总。

【在 r*******e 的大作中提到】
: session 3 的第二题怎么用分布式计算 解决呢?
Z**********4
发帖数: 528
20
哈哈。累啊。

【在 j**********3 的大作中提到】
: 你最近面很多阿
相关主题
job opportunity in AMEX Phoenix问个amazon面试题
这句python什么意思问一个题目,面试时我没有搞出来
discuss an array rearrange questionLeetCode Runtime Error 一问
进入JobHunting版参与讨论
h*******e
发帖数: 1377
21
很多东西有类库实现了, 用和想的时候,思维就把这个抽象掉了, 渐渐就忘掉了~~~
等晚上有大块时间的,我再仔细看看你的面经里面的题。多谢面经,很详细的。

【在 Z**********4 的大作中提到】
: 只用实现插入。
: 用一个数组表示heap。
: 几行代码就可以搞定。

t*******i
发帖数: 4960
22
MapReduce?

【在 Z**********4 的大作中提到】
: 我觉得大概思路就是先把相同的url想办法放到同一个server上面。利用类似
: consistent hashing的办法。
: 然后每个server计算distinct的url。再汇总。

l*****a
发帖数: 14598
23
好银,先顶后看

8bytes

【在 Z**********4 的大作中提到】
: session 1一个class {int a, bool c, int b} 里面每个variable所占的空间都不同
: ,比如a,b是int 所以分别占4byte. bool的c只占1byte。还有其他变量,可能占8bytes
: 或者16bytes。都是2的次方就是。
: 问题是写一个程序让他们可以很好的被放到8byte为单位的block里面去然后空间不会浪
: 费。
: 比如如果是 就按照a, c, b的话它一共要占12个byte。因为当把a和c放到一个block的
: 时候就会浪费一些空间。
: 所以最好摆成a,b,c这样的话更合理。占9个byte。剩下的空间还可以放一些小的
: object。
: 其实这个就是用排序,然后从大的变量依次放进block。

l*****8
发帖数: 1083
24
mark
w******e
发帖数: 1621
25
先谢lz好人,第一题的follow up 没有看懂啊 lz能不能举个栗子

8bytes

【在 Z**********4 的大作中提到】
: session 1一个class {int a, bool c, int b} 里面每个variable所占的空间都不同
: ,比如a,b是int 所以分别占4byte. bool的c只占1byte。还有其他变量,可能占8bytes
: 或者16bytes。都是2的次方就是。
: 问题是写一个程序让他们可以很好的被放到8byte为单位的block里面去然后空间不会浪
: 费。
: 比如如果是 就按照a, c, b的话它一共要占12个byte。因为当把a和c放到一个block的
: 时候就会浪费一些空间。
: 所以最好摆成a,b,c这样的话更合理。占9个byte。剩下的空间还可以放一些小的
: object。
: 其实这个就是用排序,然后从大的变量依次放进block。

l*****a
发帖数: 14598
26
得写两个吧
heap未满时shiftup
满时shiftdown

【在 Z**********4 的大作中提到】
: 只用实现插入。
: 用一个数组表示heap。
: 几行代码就可以搞定。

v***n
发帖数: 562
27
mark!
Good luck!
m*****k
发帖数: 731
28
比如如果变量的size一次是4, 4, 1, 1, 8, 8, 1, 1最好的排法是4, 4, 8, 8, 1, 1,
1, 1.而不是8 8 4 4 1 1 1 1因为前一种所需要移动的cost最小。
>=8的直接输出,<8的插入一个当前block(if null, then create 1),overflow则内
部按降序,
insertion sort,满8输出,多的插入新block中,update 当前block=新block,
循环完时输出当前block if !null,

8bytes

【在 Z**********4 的大作中提到】
: session 1一个class {int a, bool c, int b} 里面每个variable所占的空间都不同
: ,比如a,b是int 所以分别占4byte. bool的c只占1byte。还有其他变量,可能占8bytes
: 或者16bytes。都是2的次方就是。
: 问题是写一个程序让他们可以很好的被放到8byte为单位的block里面去然后空间不会浪
: 费。
: 比如如果是 就按照a, c, b的话它一共要占12个byte。因为当把a和c放到一个block的
: 时候就会浪费一些空间。
: 所以最好摆成a,b,c这样的话更合理。占9个byte。剩下的空间还可以放一些小的
: object。
: 其实这个就是用排序,然后从大的变量依次放进block。

o***e
发帖数: 28
29
感觉是个好解法 只是如果 blocks 比较少的时候 因为是插入排序 有可能没有快排之
类的快 不知道会不会是个问题

【在 m*****k 的大作中提到】
: 比如如果变量的size一次是4, 4, 1, 1, 8, 8, 1, 1最好的排法是4, 4, 8, 8, 1, 1,
: 1, 1.而不是8 8 4 4 1 1 1 1因为前一种所需要移动的cost最小。
: >=8的直接输出,<8的插入一个当前block(if null, then create 1),overflow则内
: 部按降序,
: insertion sort,满8输出,多的插入新block中,update 当前block=新block,
: 循环完时输出当前block if !null,
:
: 8bytes

r*******k
发帖数: 1423
30
还是不一定是最优啊
4 2 2 这样的,就完全不用移动
或者8个1连续的



【在 U***A 的大作中提到】
: 第一题是一定要从大到小排序?是不是只要分两端就可以,4byte及以上的排在前面,
: 2byte及1byte的排在后半段(后半段还是按大小排序。)
: 有点像quick sort。

相关主题
最近面试的一个问题shorten url 单机解法 抛砖引玉
Google phone interview questions求助:一道careercup的算法题
一道G面经两道算法题
进入JobHunting版参与讨论
r*******k
发帖数: 1423
31
堆一定要有长度限制么?
看了眼java里的实现
内部数组,如果长度超了
就新开数组进行arraycopy

【在 l*****a 的大作中提到】
: 得写两个吧
: heap未满时shiftup
: 满时shiftdown

t*******e
发帖数: 274
32
有具体的实现么?

【在 m*****k 的大作中提到】
: 比如如果变量的size一次是4, 4, 1, 1, 8, 8, 1, 1最好的排法是4, 4, 8, 8, 1, 1,
: 1, 1.而不是8 8 4 4 1 1 1 1因为前一种所需要移动的cost最小。
: >=8的直接输出,<8的插入一个当前block(if null, then create 1),overflow则内
: 部按降序,
: insertion sort,满8输出,多的插入新block中,update 当前block=新block,
: 循环完时输出当前block if !null,
:
: 8bytes

Z**********4
发帖数: 528
33
这个取决于面试官。
你可以问他。 我当时没有问了。

【在 r*******k 的大作中提到】
: 堆一定要有长度限制么?
: 看了眼java里的实现
: 内部数组,如果长度超了
: 就新开数组进行arraycopy

x**i
发帖数: 2627
34
不错,赞一个!!

8bytes

【在 Z**********4 的大作中提到】
: session 1一个class {int a, bool c, int b} 里面每个variable所占的空间都不同
: ,比如a,b是int 所以分别占4byte. bool的c只占1byte。还有其他变量,可能占8bytes
: 或者16bytes。都是2的次方就是。
: 问题是写一个程序让他们可以很好的被放到8byte为单位的block里面去然后空间不会浪
: 费。
: 比如如果是 就按照a, c, b的话它一共要占12个byte。因为当把a和c放到一个block的
: 时候就会浪费一些空间。
: 所以最好摆成a,b,c这样的话更合理。占9个byte。剩下的空间还可以放一些小的
: object。
: 其实这个就是用排序,然后从大的变量依次放进block。

h*******0
发帖数: 270
35
用hadoop来做可以吗? 一个reducer就搞定了。 还是说google不想让咱们借用外部工
具?

【在 Z**********4 的大作中提到】
: 我觉得大概思路就是先把相同的url想办法放到同一个server上面。利用类似
: consistent hashing的办法。
: 然后每个server计算distinct的url。再汇总。

f******n
发帖数: 279
36
mark
s******i
发帖数: 236
37
lz再发下店面?
j**********3
发帖数: 3211
38
我可以站内你问经验么?
先谢谢lz。。。

【在 Z**********4 的大作中提到】
: 哈哈。累啊。
Z**********4
发帖数: 528
39
可以啊

【在 j**********3 的大作中提到】
: 我可以站内你问经验么?
: 先谢谢lz。。。

y***n
发帖数: 1594
40
这给bit 题什么意思?

【在 Z**********4 的大作中提到】
: 不能同意更多。
: lc也刷了几遍了。
: 但是写那个bit流的时候,输入是一个char array
: 然后我在那里想办法算offset做位操作,最后code竟然没有finish。
: 然后我就释然了。你懂的。

相关主题
两道算法题问个google面试题
问两道数字题问个Amazon面试题
问一道题贡献个题
进入JobHunting版参与讨论
m*****k
发帖数: 731
41
code起来感觉是比较tedious,
但本质上就是新来的size如果会使当前没填满的block溢出的话就去找block中刚好
sumup等于溢出量的size们(从后往前倒着找保证最小move, 而且可以证明一定可以找
到sumup等于溢出量的size们,这源于size都是2的次方),把他们放入新block,新
来的size加入到当前没填满的block使之填满,输出。
example:
[1 1 1 4 ], incoming 4, overflow 3, find the 3 1's that sumup to 3,
change to
[4 4 ] [1 1 1], 输出 4, 4, 当前没填满的block reset 为 [ 1 1 1]

【在 t*******e 的大作中提到】
: 有具体的实现么?
m********6
发帖数: 58
42
SESSION1 的体,我觉得不用SORT。 只要在无法完成8bytes的时候swap即可。
public static void optimize(int[] fields)
{
int blockStart = 0;
int blockSize = 0;
for (int i = 0; i < fields.length; i++)
{
blockSize += fields[i];
if (blockSize % 8 == 0)
{
blockStart = i + 1;
blockSize = 0;
}
else if (blockSize > 8)
{
blockStart = rearrange(fields, blockStart, i);
blockSize = blockSize % 8;
}
}
}
private static int rearrange(int[] fields, int blockStart, int blockEnd)
{
int maxSize, maxPos, blockSize;
blockSize = 0;
while (blockSize < 8)
{
maxSize = fields[blockStart];
maxPos = blockStart;
for (int i = blockStart + 1; i <= blockEnd; i++)
{
if (fields[i] > maxSize)
{
maxSize = fields[i];
maxPos = i;
}
}
fields[maxPos] = fields[blockStart];
fields[blockStart] = maxSize;
blockStart++;
blockSize += maxSize;
}
return blockStart;
}
rearrange虽然是有一个loop, 但是虽多执行7次, 所以是O(1)。 optimize是O(N)。
严格的说, optimize是O(N*M*M)。 N是field size, M是block size。

8bytes

【在 Z**********4 的大作中提到】
: session 1一个class {int a, bool c, int b} 里面每个variable所占的空间都不同
: ,比如a,b是int 所以分别占4byte. bool的c只占1byte。还有其他变量,可能占8bytes
: 或者16bytes。都是2的次方就是。
: 问题是写一个程序让他们可以很好的被放到8byte为单位的block里面去然后空间不会浪
: 费。
: 比如如果是 就按照a, c, b的话它一共要占12个byte。因为当把a和c放到一个block的
: 时候就会浪费一些空间。
: 所以最好摆成a,b,c这样的话更合理。占9个byte。剩下的空间还可以放一些小的
: object。
: 其实这个就是用排序,然后从大的变量依次放进block。

m********6
发帖数: 58
43
Session 4:
A valid number may not contain 2,3,4,5,7. Flip those numbers 180 degrees and
it's not a valid number. Single digit numbers is a special case. It
contains 0, 1, 8. For 2N digit numbers, the first digit can be 1,6,8,9 and
the next N-1 digits can be 0,1,6,8,9. For 2N+1 digit numbers, you can insert
0,1,8 in the middle of any valid 2N digit numbers and it's still a valid
number.
1 digit: 3
2N digit: 4 * 5 ^ (N-1)
2N+1 digit: 3 * 4 * 5 ^ (N-1)
For example, there are 20 valid 4 digit numbers:
10 => 1001, 11 => 1111, 16 => 1691, 18 => 1881, 19 => 1961
60 => 6009, 61 => 6119, 66 => 6699, 68 => 6889, 69 => 6969
80 => 8008, 81 => 8118, 86 => 8698, 88 => 8888, 89 => 8968
90 => 9006, 91 => 9116, 96 => 9696, 98 => 9886, 99 => 9966
there are 60 valid 5 digit numbers
1001 => 10001, 10101, 10801 etc
public static int getNumMirrors(String limit)
{
byte[] n = limit.getBytes();
int digits = n.length;
for (int i = 0; i < digits; i++)
{
n[i] -= '0';
}
if (digits == 1)
{
return getNumMirrorsSingleDigit(n[0]);
}
else
{
return getNumMirrorsLessThanKDigits(digits) +
getNumKDigitMirrorsLessThanN(n, digits);
}
}
private static int getNumMirrorsSingleDigit(int n)
{
if (n >=8) return 3;
if (n >=1) return 2;
return 1;
}
private static int getNumMirrorsLessThanKDigits(int digits)
{
int sum = 3; // 0, 1, 8
int base = 4; // 1, 8, 6, 9
for (int i = 1; i < digits/2; i++)
{
sum += 4 * base;
base *= 5;
}
if (digits % 2 == 1)
{
sum += base;
}
return sum;
}
private static int getNumKDigitMirrorsLessThanN(byte[] n, int digits)
{
int sum;
int base = 1;
boolean isNMirror;
for (int i = 1; i < digits/2; i++)
{
base *= 5;
}
if (digits % 2 == 1)
{
base *= 3;
}
switch (n[0]) // 1, 6, 8, 9
{
// n=987654321, add all mirrors between 0 and 900000000
case 9: sum = 3 * base; isNMirror = n[digits-1] == 6; break;
case 8: sum = 2 * base; isNMirror = n[digits-1] == 8;break;
case 7: return 2 * base;
case 6: sum = base; isNMirror = n[digits-1] == 9;break;
case 1: sum = 0; isNMirror = n[digits-1] == 1;break;
default: return base;
}
for (int i = 1; i < digits/2; i++)
{
base /= 5;
switch (n[i]) // 0, 1, 6, 8, 9
{
// n=987654321, i=1, add all mirrors between 900000000 and
980000000
case 9: sum += 4 * base; isNMirror &= n[digits-i-1] == 6;
break;
case 8: sum += 3 * base; isNMirror &= n[digits-i-1] == 8;
break;
case 7: return 3 * base;
case 6: sum += 2 * base; isNMirror &= n[digits-i-1] == 9;
break;
case 1: sum += base; isNMirror &= n[digits-i-1] == 1; break;
case 0: isNMirror &= n[digits-i-1] == 0; break;
default: return sum + 2 * base;
}
}
if (digits % 2 == 1)
{
switch (n[digits/2]) // 0, 1, 8
{
case 9: return sum + 3;
case 8: sum += 2; break;
case 1: sum += 1; break;
case 0: break;
default: return sum + 2;
}
}
return isNMirror ? sum + 1 : sum;
}

8bytes

【在 Z**********4 的大作中提到】
: session 1一个class {int a, bool c, int b} 里面每个variable所占的空间都不同
: ,比如a,b是int 所以分别占4byte. bool的c只占1byte。还有其他变量,可能占8bytes
: 或者16bytes。都是2的次方就是。
: 问题是写一个程序让他们可以很好的被放到8byte为单位的block里面去然后空间不会浪
: 费。
: 比如如果是 就按照a, c, b的话它一共要占12个byte。因为当把a和c放到一个block的
: 时候就会浪费一些空间。
: 所以最好摆成a,b,c这样的话更合理。占9个byte。剩下的空间还可以放一些小的
: object。
: 其实这个就是用排序,然后从大的变量依次放进block。

m*****k
发帖数: 731
44
跑了一下你的程序,
int[] input = new int[] { 1, 1, 1, 2, 4 };
optimize(input);
input 变成 { 4, 2, 1, 1, 1 }
答案应该是{1,1,2,4,1}吧

【在 m********6 的大作中提到】
: SESSION1 的体,我觉得不用SORT。 只要在无法完成8bytes的时候swap即可。
: public static void optimize(int[] fields)
: {
: int blockStart = 0;
: int blockSize = 0;
: for (int i = 0; i < fields.length; i++)
: {
: blockSize += fields[i];
: if (blockSize % 8 == 0)
: {

g***s
发帖数: 3811
45
你这个也不是最优。
就如你给的例子: {1 1 1 4 4}
只需要2 blocks,0 swaps。

【在 m*****k 的大作中提到】
: code起来感觉是比较tedious,
: 但本质上就是新来的size如果会使当前没填满的block溢出的话就去找block中刚好
: sumup等于溢出量的size们(从后往前倒着找保证最小move, 而且可以证明一定可以找
: 到sumup等于溢出量的size们,这源于size都是2的次方),把他们放入新block,新
: 来的size加入到当前没填满的block使之填满,输出。
: example:
: [1 1 1 4 ], incoming 4, overflow 3, find the 3 1's that sumup to 3,
: change to
: [4 4 ] [1 1 1], 输出 4, 4, 当前没填满的block reset 为 [ 1 1 1]

m*****k
发帖数: 731
46
输入{1 1 1 4 4}
变成
{4 4 1 1 1} why 0 swaps?
难道你的答案是{1 1 1 4 4}?
block1 [1 1 1 ]with 5 empty , followed by block2[4 4]
显然不是答案,原题首先要求空间不浪费,其次要求最小move

【在 g***s 的大作中提到】
: 你这个也不是最优。
: 就如你给的例子: {1 1 1 4 4}
: 只需要2 blocks,0 swaps。

g***s
发帖数: 3811
47
看你如何定义不浪费
1 1 1 4 4 无论如何都要2 blocks,所以我认为的不浪费是1 1 1 4 4占用的空间是等
于4 4 1 1 1的。只是多余的空间到底是第一个block还是第二个。
另外,即使按你的理解,你用你的算法试试下面这个例子
1 1 1 4 4 1 1 1 8 8 1 1
最优解应该是4 blocks 2 swaps

【在 m*****k 的大作中提到】
: 输入{1 1 1 4 4}
: 变成
: {4 4 1 1 1} why 0 swaps?
: 难道你的答案是{1 1 1 4 4}?
: block1 [1 1 1 ]with 5 empty , followed by block2[4 4]
: 显然不是答案,原题首先要求空间不浪费,其次要求最小move

j***m
发帖数: 6
48
session 3: 1. 一个bit的stream, 每次读取6个bit。转化成char。
这题有什么特别吗?不就是把每6个bit取出来变成char吗?还是我想简单了。。。。

8bytes

【在 Z**********4 的大作中提到】
: session 1一个class {int a, bool c, int b} 里面每个variable所占的空间都不同
: ,比如a,b是int 所以分别占4byte. bool的c只占1byte。还有其他变量,可能占8bytes
: 或者16bytes。都是2的次方就是。
: 问题是写一个程序让他们可以很好的被放到8byte为单位的block里面去然后空间不会浪
: 费。
: 比如如果是 就按照a, c, b的话它一共要占12个byte。因为当把a和c放到一个block的
: 时候就会浪费一些空间。
: 所以最好摆成a,b,c这样的话更合理。占9个byte。剩下的空间还可以放一些小的
: object。
: 其实这个就是用排序,然后从大的变量依次放进block。

m*****k
发帖数: 731
49
1 1 1 4 4 1 1 1 8 8 1 1
我的方法会返回
4 4 ,8, 8, 1 1 1 1 1 1 1 1

【在 g***s 的大作中提到】
: 看你如何定义不浪费
: 1 1 1 4 4 无论如何都要2 blocks,所以我认为的不浪费是1 1 1 4 4占用的空间是等
: 于4 4 1 1 1的。只是多余的空间到底是第一个block还是第二个。
: 另外,即使按你的理解,你用你的算法试试下面这个例子
: 1 1 1 4 4 1 1 1 8 8 1 1
: 最优解应该是4 blocks 2 swaps

y***n
发帖数: 1594
50
再看了一遍题,我觉得你是对的。

【在 m*****k 的大作中提到】
: 1 1 1 4 4 1 1 1 8 8 1 1
: 我的方法会返回
: 4 4 ,8, 8, 1 1 1 1 1 1 1 1

相关主题
请教一道G家面试题这句python什么意思
leetcode plus one 书上答案是不是错了?discuss an array rearrange question
job opportunity in AMEX Phoenix问个amazon面试题
进入JobHunting版参与讨论
g***s
发帖数: 3811
51
但最优解应该是(swaps=2)
1 1 1 1 1 1 1 1 8 8 4 4

【在 m*****k 的大作中提到】
: 1 1 1 4 4 1 1 1 8 8 1 1
: 我的方法会返回
: 4 4 ,8, 8, 1 1 1 1 1 1 1 1

m*****k
发帖数: 731
52
我那个办法一次扫描,只处理一个当前block,的确不能得到1 1 1 1 1 1 1 1 8 8 4 4。
不过最优解应该是
1 1 1 1 1 1 1 1 4 4 8 8 吧
要得到这种解,得再改改,就是在未满的当前block后如果有满的block,别急着输出,
满的
block先存到一个fullfilled block list 中,然后incoming 的size能填到前边未满
block的,则填之,不能则开新的block,最后merge输出fullfilled block list 和当
前block(可满可不满)。
code麻烦不少,
需要类似如下的class
block{
int index;
List sizes;
}

【在 g***s 的大作中提到】
: 但最优解应该是(swaps=2)
: 1 1 1 1 1 1 1 1 8 8 4 4

g***s
发帖数: 3811
53
1 1 1 1 1 1 1 1 4 4 8 8需要交换的次数更多,1...8 8 4 4 只要两次交换。
你这改良也无法保证最少交换次数。

4。
★ 发自iPhone App: ChineseWeb 8.6

【在 m*****k 的大作中提到】
: 我那个办法一次扫描,只处理一个当前block,的确不能得到1 1 1 1 1 1 1 1 8 8 4 4。
: 不过最优解应该是
: 1 1 1 1 1 1 1 1 4 4 8 8 吧
: 要得到这种解,得再改改,就是在未满的当前block后如果有满的block,别急着输出,
: 满的
: block先存到一个fullfilled block list 中,然后incoming 的size能填到前边未满
: block的,则填之,不能则开新的block,最后merge输出fullfilled block list 和当
: 前block(可满可不满)。
: code麻烦不少,
: 需要类似如下的class

y***n
发帖数: 1594
54
大牛不要调我们口味了,上一个Code吧 :-)

【在 g***s 的大作中提到】
: 1 1 1 1 1 1 1 1 4 4 8 8需要交换的次数更多,1...8 8 4 4 只要两次交换。
: 你这改良也无法保证最少交换次数。
:
: 4。
: ★ 发自iPhone App: ChineseWeb 8.6

g***s
发帖数: 3811
55
这题我不会

【在 y***n 的大作中提到】
: 大牛不要调我们口味了,上一个Code吧 :-)
y***n
发帖数: 1594
56
好了,我不纠结了 :-)

【在 g***s 的大作中提到】
: 这题我不会
m*****k
发帖数: 731
57
1 1 1 1 1 1 1 1 4 4 8 8需要交换的次数更多,1...8 8 4 4 只要两次交换。????
1 1 1 1 1 1 1 1 4 4 8 8只需要把5个1插入第一block而已,
你这个还把4 4 都移动了,完全没必要。
又看了一下原帖,移动cost最小,我不认为swap次数最少=移动cost最小

【在 g***s 的大作中提到】
: 1 1 1 1 1 1 1 1 4 4 8 8需要交换的次数更多,1...8 8 4 4 只要两次交换。
: 你这改良也无法保证最少交换次数。
:
: 4。
: ★ 发自iPhone App: ChineseWeb 8.6

g***s
发帖数: 3811
58
1 1 1 4 4 1 1 1 8 8 1 1
1 1 1 1 1 1 1 1 4 4 8 8 (at least 6 items are changed)
1 1 1 1 1 1 1 1 8 8 4 4 (only 4 items are changed, swap(4,11) swap(5,12))
no matter what's your understanding for the cost/swap, 1 1 1 1 1 1 1 1 8 8 4
4 should be better.

??

【在 m*****k 的大作中提到】
: 1 1 1 1 1 1 1 1 4 4 8 8需要交换的次数更多,1...8 8 4 4 只要两次交换。????
: 1 1 1 1 1 1 1 1 4 4 8 8只需要把5个1插入第一block而已,
: 你这个还把4 4 都移动了,完全没必要。
: 又看了一下原帖,移动cost最小,我不认为swap次数最少=移动cost最小

m*****k
发帖数: 731
59
感觉你还是算swap,
其实从array idx 变化,
移动步数而言,这两个加起来一样多。
但就本题block分配而言,4 4所在的block没必要调到最后。
1 1 1 1 1 1 1 1 4 4 8 8 表示
[1 1 1 1 1 1 1 1] [ 4 4] [8 8]
1 1 1 1 1 1 1 1 8 8 4 4 表示
[1 1 1 1 1 1 1 1] [8 8] [4 4]
1 1 1 4 4 1 1 1 8 8 1 1
只需要把1都往第一个block填就行了,4 4 8 8不用动,
你觉得1 1 1 1 1 1 1 1] [8 8] [4 4]
比 [1 1 1 1 1 1 1 1] [ 4 4] [8 8] 更优么?

4

【在 g***s 的大作中提到】
: 1 1 1 4 4 1 1 1 8 8 1 1
: 1 1 1 1 1 1 1 1 4 4 8 8 (at least 6 items are changed)
: 1 1 1 1 1 1 1 1 8 8 4 4 (only 4 items are changed, swap(4,11) swap(5,12))
: no matter what's your understanding for the cost/swap, 1 1 1 1 1 1 1 1 8 8 4
: 4 should be better.
:
: ??

g***s
发帖数: 3811
60
按照你的理解,
a1 a2 .... a11 12
1 1 1 4 4 1 1 1 8 8 1 1
先把a11 a12移到a3后面,再把a4 a5移到最后(或者移到a6后面),只需要4步。
按你说的需要5步("把5个1插入第一block而已“)。
再给你个例子
1 1 1 4 4 1
按照你的算法 [4 4] 构成一个full block, 你会输出 4 4 1 1 1 1 (2 moves at
least)
而正确的应该是 1 1 1 4 1 4 (1 move)

【在 m*****k 的大作中提到】
: 感觉你还是算swap,
: 其实从array idx 变化,
: 移动步数而言,这两个加起来一样多。
: 但就本题block分配而言,4 4所在的block没必要调到最后。
: 1 1 1 1 1 1 1 1 4 4 8 8 表示
: [1 1 1 1 1 1 1 1] [ 4 4] [8 8]
: 1 1 1 1 1 1 1 1 8 8 4 4 表示
: [1 1 1 1 1 1 1 1] [8 8] [4 4]
: 1 1 1 4 4 1 1 1 8 8 1 1
: 只需要把1都往第一个block填就行了,4 4 8 8不用动,

相关主题
问一个题目,面试时我没有搞出来Google phone interview questions
LeetCode Runtime Error 一问一道G面经
最近面试的一个问题shorten url 单机解法 抛砖引玉
进入JobHunting版参与讨论
m*****k
发帖数: 731
61
你说的是移动几次,我说的是移动的距离总和,不纠结这个问题了。
>>1 1 1 4 4 1
我的算法的确只能返回4 4 1 1 1 1
1 1 1 4 1 4 这种解得要求全局优化,重组,我是想不出简洁的通用算法求出来了,求
各位大神不吝指教,呵呵。
a**a
发帖数: 316
62
我觉得的你的理解是正确的。题目所说的应该是bit 交换,而不是整数交换。

【在 m*****k 的大作中提到】
: 你说的是移动几次,我说的是移动的距离总和,不纠结这个问题了。
: >>1 1 1 4 4 1
: 我的算法的确只能返回4 4 1 1 1 1
: 1 1 1 4 1 4 这种解得要求全局优化,重组,我是想不出简洁的通用算法求出来了,求
: 各位大神不吝指教,呵呵。

1 (共1页)
进入JobHunting版参与讨论
相关主题
问一个题目,面试时我没有搞出来问两道数字题
LeetCode Runtime Error 一问问一道题
最近面试的一个问题问个google面试题
Google phone interview questions问个Amazon面试题
一道G面经贡献个题
shorten url 单机解法 抛砖引玉请教一道G家面试题
求助:一道careercup的算法题leetcode plus one 书上答案是不是错了?
两道算法题job opportunity in AMEX Phoenix
相关话题的讨论汇总
话题: digits话题: int话题: blockstart话题: sum话题: blocksize