Redian新闻
>
发道面试题求大牛帮解答
avatar
发道面试题求大牛帮解答# JobHunting - 待字闺中
x*o
1
Find the complement domino pairs.
多米诺骨牌由2个数字构成,每个数字可以是0-6. 给定an array of Dominos, find if
there are two complement dominos. Complement dominos是说两个多米诺骨牌a和b
。a的上半部分的数字和b的上半部分的数字相加是6,a的下半部分的数字和b的下半部
分的数字相加也是6。多米诺骨牌可以翻转。
举个例子,
+----+ +----+
| x | | x x |
| x x | | x x |
+----+ +----+
| x | | x |
| x | | x x |
+----+ +----+
是complement dominos,
+----+ +----+
| x x | | |
| x x | | |
+----+ +----+
| x | |x x x |
| x | |x x x |
+----+ +----+
以上每一个和自身都是complementory,但是在上面的题中,IFF array里面有2个一样
的才算。
请大牛赐教用什么data structure表示domino,然后怎么找complement。多谢啦!!
avatar
j*8
2
第一个例子右边的牌上下是不是颠倒了?
avatar
x*o
3
多米诺骨牌可以翻转的,所以2-4和 4-2 其实是一样的。我是故意翻过来来说明这个。

【在 j*****8 的大作中提到】
: 第一个例子右边的牌上下是不是颠倒了?
avatar
t*h
4
没太看明白 就是找两个元素 一个元素的一对和另一个的一对数字配对 加起来都是6就
行了?

if
b

【在 x*****o 的大作中提到】
: Find the complement domino pairs.
: 多米诺骨牌由2个数字构成,每个数字可以是0-6. 给定an array of Dominos, find if
: there are two complement dominos. Complement dominos是说两个多米诺骨牌a和b
: 。a的上半部分的数字和b的上半部分的数字相加是6,a的下半部分的数字和b的下半部
: 分的数字相加也是6。多米诺骨牌可以翻转。
: 举个例子,
: +----+ +----+
: | x | | x x |
: | x x | | x x |
: +----+ +----+

avatar
x*o
5
请看这个:
http://www.amazon.com/Double-Professional-Dominoes-Spinner-Wood
就是给一个array of 这个,找是否存在两张,使得上,下的和分别是6.

【在 t*********h 的大作中提到】
: 没太看明白 就是找两个元素 一个元素的一对和另一个的一对数字配对 加起来都是6就
: 行了?
:
: if
: b

avatar
s*t
6

穷举吧。。数字也没有规律,面试考这个有什么意义

【在 t*********h 的大作中提到】
: 没太看明白 就是找两个元素 一个元素的一对和另一个的一对数字配对 加起来都是6就
: 行了?
:
: if
: b

avatar
l*8
7
觉得是two-sum变种

if
b

【在 x*****o 的大作中提到】
: Find the complement domino pairs.
: 多米诺骨牌由2个数字构成,每个数字可以是0-6. 给定an array of Dominos, find if
: there are two complement dominos. Complement dominos是说两个多米诺骨牌a和b
: 。a的上半部分的数字和b的上半部分的数字相加是6,a的下半部分的数字和b的下半部
: 分的数字相加也是6。多米诺骨牌可以翻转。
: 举个例子,
: +----+ +----+
: | x | | x x |
: | x x | | x x |
: +----+ +----+

avatar
b*e
8
这还sum个啥,直接hashmap, 一共就36种情况。

【在 l*********8 的大作中提到】
: 觉得是two-sum变种
:
: if
: b

avatar
l*8
9
同意你的解法。
对于unsorted array的two-sum, 一种解法就是用hashmap.
PS. 对于本题,如不考虑上下颠倒的重复,最多有7*7=49可能性。

【在 b***e 的大作中提到】
: 这还sum个啥,直接hashmap, 一共就36种情况。
avatar
t*a
10
Struct Card
{
int ID;
int up;
int bottom;
}
card上下颠倒了,ID不变,然后Hashmap扫一遍就行了,用ID判断是不是self-comp
avatar
x*o
11
能详细说说嘛?key和value各是什么呢?

【在 l*********8 的大作中提到】
: 同意你的解法。
: 对于unsorted array的two-sum, 一种解法就是用hashmap.
: PS. 对于本题,如不考虑上下颠倒的重复,最多有7*7=49可能性。

avatar
t*a
12

我也想知道有没有啥好的structure.我想的是
unordered_map>;
int key只存up的value就行了。找到up匹配的再判断bottom是否匹配。

【在 x*****o 的大作中提到】
: 能详细说说嘛?key和value各是什么呢?
avatar
l*8
13
我觉得用hashset就可以了, key就是一个多米诺牌。

【在 x*****o 的大作中提到】
: 能详细说说嘛?key和value各是什么呢?
avatar
b*e
14
哎,又算错了,是49个。two-sum也是对的。

【在 l*********8 的大作中提到】
: 同意你的解法。
: 对于unsorted array的two-sum, 一种解法就是用hashmap.
: PS. 对于本题,如不考虑上下颠倒的重复,最多有7*7=49可能性。

avatar
x*o
15
可是这样的话,要先sort一下吗?不然如果有2个2-4这种是找不到的啊。。。还是每次
匹配up都要匹配一下down?
能具体说说匹配过程吗?

【在 t*****a 的大作中提到】
:
: 我也想知道有没有啥好的structure.我想的是
: unordered_map>;
: int key只存up的value就行了。找到up匹配的再判断bottom是否匹配。

avatar
x*o
16
想不太明白用set怎么做。。能具体说说过程吗?

【在 l*********8 的大作中提到】
: 我觉得用hashset就可以了, key就是一个多米诺牌。
avatar
z*e
17
你每次找到一个骨牌,可以把他的complementary加到hashset里面,然后拿到新的骨牌
就看在不在这个hashset里,如果在就找到了,如果没有,那就把新的骨牌的
complementary也push到hashset里面去。这个set可以加个限定条件,比如上面的数字
小于等于下面的数字
就是two sum的做法吧

【在 x*****o 的大作中提到】
: 想不太明白用set怎么做。。能具体说说过程吗?
avatar
t*a
18

首先你要把每个骨牌做一个copy, id一样,但上下颠倒。你说的两个2-4最后是两个2-4
,两个4-2的copy,但ID只有两个。不用sort啊,你拿到一个up,直接找对应的(6-up)的
hash item,然后再匹配down就行了。要是再想快就建立成unordered_mapunordered_map>,不过感觉没必要。
直接用unordered_set好一些

【在 x*****o 的大作中提到】
: 可是这样的话,要先sort一下吗?不然如果有2个2-4这种是找不到的啊。。。还是每次
: 匹配up都要匹配一下down?
: 能具体说说匹配过程吗?

avatar
f*t
19
vector> dominos;
unordered_map> seen;
for (auto pr : dominos) {
if (seen.find(6 - pr->first) != seen.end() &&
seen[6 - pr->first].find(6 - pr->second) != seen[6 - pr->first].end() ||
seen.find(6 - pr->second) != seen.end() &&
seen[6 - pr->second].find(6 - pr->first) != seen[6 - pr->second].end())
{
return true;
}//if
seen[pr->second].insert(pr->first);
seen[pr->first].insert(pr->second);
}

if
b

【在 x*****o 的大作中提到】
: Find the complement domino pairs.
: 多米诺骨牌由2个数字构成,每个数字可以是0-6. 给定an array of Dominos, find if
: there are two complement dominos. Complement dominos是说两个多米诺骨牌a和b
: 。a的上半部分的数字和b的上半部分的数字相加是6,a的下半部分的数字和b的下半部
: 分的数字相加也是6。多米诺骨牌可以翻转。
: 举个例子,
: +----+ +----+
: | x | | x x |
: | x x | | x x |
: +----+ +----+

avatar
n*s
20
就是简单的hashset。
用0-6作为key,0和6, 1和5,2和4,3和3配对即可
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。