楼主11月14号做的Akuna的OA,跟地里整理的差不多。
1-6:C++基础题。. visit 1point3acres.com for more.
7-9:编程题
7:cut the sticks。用hash map统计有多少种不同的数就可以了。
8:split pixels。给一个24位字符串,每8位代表一个颜色。给了几个颜色,求与其最接近的颜色。如何一样接近,返回ambiguous.
9:is a binaray tree valid. 给出一堆边,叫你判断是不是合法的二叉树。题目定义了几种错误的类型。比如重复边,形成环。。
由于准备的不是很充分,而且只能用C++编程,所以第三题没做完。。。
7 Cut the sticks // 网上搜吧
8 Splitting pixels // 给定一个24位的二进制串 每八位转成r, g, b 跟black(0,0,0), red(255,0,0), green(0,255,0), blue(0,0,255), white(255,255,255) 比较L2 distance. 哪个小就返回哪个颜色.如果有一样小的返回ambiguous
9 Is this a binary tree // 给定一堆父子节点 然后判断能不能成树 输出几种情况 例如有环或其他 没做出来 不是很记得题目了
C++好久没写第二题没写完,第三题倒是画桥OA做过 单纯就是parse strings to build a tree,然后build的过程中检查corner case
和drawbridge的题目一模一样,我记得drawbridge题目地里有截图
就是给一堆node pair,要你build tree,可能有几种错误e1 e2 e3等等,比如说e1是两个root,e2是一个点有三个children之类的,每种错误都有一个优先级,遇到错误的时候直接返回优先级最高的那个。
https://www.hackerrank.com/challenges/cut-the-sticks/problem
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
while (nums.size() > 0) {
cout << nums.size() << endl;
int min = *min_element(nums.begin(), nums.end());
for (vector<int>::iterator it = nums.begin(); it != nums.end();) {
if (*it == min) {
nums.erase(it);
} else {
it++;
}
}
}
return 0;
}
https://stackoverflow.com/questions/36793382/how-to-split-the-binary-string
遍历的时候维护一个Set存放所有遍历过的节点,如果当前节点已经在Set里那么肯定就有环了。