网易2020校招笔试- 算法平台工程师(正式批)——练习

原题链接

1以下哪个可能会产生编译错误?

#include
class Foo
{
public:
    Foo(int v) :m_value(v) { } //1
    void print()
    {
        std::cout << m_value;
    }
    ~Foo() {}
     
private:
    Foo() { m_value = 0; }//2
    int m_value;
};
int main()
{
    Foo a;//3
    a.print();
    Foo b(1);//4
    b.print();
}

答案 3

2 数据结构中,沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用( )次序的遍历实现编号。

答案 后序
解释:先序 根左右
中序 左根右
后序 左右根

3 现在假设F是一个森林,B是由F转换得到的二叉树,F中有n个非终端结点,B中右指针域为空的结点有( )个?

答案 N+1
解释:根据森林转换为二叉树的“左孩子右兄弟”的表示法,即对于每棵二叉树,每个结点的右指针指向其右邻兄弟。
针对每一个非终端结点,一定会有且仅有一个孩子结点没有右邻兄弟,即右指针领域为空。因此N个非终端结点,就有N个右指针域为空。
看完单棵二叉树,再来看这些二叉树是怎么连接成一棵二叉树的。原理是:将后一棵二叉树的根节点作为前一棵二叉树的右孩子连接起来,所以只有最后一棵二叉树的根结点没有右孩子,即右指针域为空。
因此综上:N个非终端结点,就有(N+1)个结点的右指针域为空。

4现在假设对N个元素的链表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为

答案 (N+l)/2
解释:第一个数的比较次数为1,第二个数的比较次数为2。。。以此类推第N个数的比较次数为N,所以总的比较次数为1+2+…+N=N(N+1)/2,平均比较次数为(N+1)/2,也即平均查找长度。

5完全二叉树是指深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一 一对应将一棵有50个结点的完全二叉树按节点编号,如根节点的编号为1,那么编号为25的结点是( )?

答案 有左孩子,无右孩子
解释 完全二叉树,而且与深度为K的满二叉树中编号从1至n的结点一 一对应,说明满足每层从左到右都是按编号顺序排列的,根节点的编号为1,对于编号为M的结点,其左孩子编号为2M , 右孩子编号为2M+1。M=25代入,发现选B

6 下列关于Python的说法不正确的是:

答案 Python使用与类相同的函数作为构造方法
解释:Python 使用_init_()作为构造方法

7 以下关于卷积神经网络,说法正确的是

答案 卷积神经网络可以有多个卷积核,可以不同大小
解释 同一层feature map可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到的特征往往比使用单一卷积核的要好,谷歌的GoogLeNet,或者说Inception系列的网络,就使用了多个卷积核的结构。

8 关于下面代码说法正确的是:

public class Demo {
    private Demo() {}
    private static class Singleton {
        private static final Demo INSTANCE = new Demo();
    }
    public static Demo getInstance() {
        return Singleton.INSTANCE;
    }
}

答案 线程安全,懒加载

9 (umask 022;touch a) 等价于 (touch a; chmod XXX),请问XXX用哪个数字表示

答案 644
解释:unmask的值为022,表示反码。反码022为root账户,创建文件权限默认权限值为rwx-rwx-rwx(777),减去022,755

10 假设 有个空文件file,执行如下命令:

echo hello >> file;
echo world > file;
cat file

答案 world
解释 使用>>指令向文件追加内容,原内容将保存。
使用>指令覆盖文件原内容并重新输入内容,若文件不存在则创建文件。

11 有一个文本文件,2亿行,每行长度255个字符以内,长度不定,均为可见字符。

在16Core64G内存的机器上,对文件进行读入,排序(字典),输出成一个文件。

要求完成整个工作的时间越短越好

int sort( const char * in_file_name, const char * out_file_name )

{

12 有三种葡萄,每种分别有a,b,c颗。有三个人,第一个人只吃第1,2种葡萄,第二个人只吃第2,3种葡萄,第三个人只吃第1,3种葡萄。

适当安排三个人使得吃完所有的葡萄,并且且三个人中吃的最多的那个人吃得尽量少。

import sys
import math
 
n = int(sys.stdin.readline().strip())
lists = []
for i in range(n):
    tmp = list(map(int, str(sys.stdin.readline().strip()).split()))
    lists.append(tmp)
 
for i in lists:
    x = (sum(i)+2) // 3
    y = (max(i)+1) //2
    print(int(max(x,y)))

13 小易有个数字排成一个环,你能否将它们分成连续的两个部分(即在环上必须连续),使得两部分的和相等?

import sys
 
def getCount(list1,list2):
    sum1 = sum(list1)
    if sum1%2:
        return "NO"
    num1 = int(sum1 /2)
 
    leng = len(list2)
    for i in range(leng):
        num2 = 0
        for j in range(i, leng):
            num2 += list2[j]
            if num2 > num1:
                break
            if num2 == num1:
                num3 = int((sum(list2[j + 1:])+sum(list2[:i])-num2)/2)
                if num3 == num2:
                    return "YES"
    return "NO"
 
num = int(sys.stdin.readline())
for i in range(num):
    list1 = []
    geshu = int(sys.stdin.readline())
    list1=list(map(int, sys.stdin.readline().split()))
    list2 = list1 * 2
    print(getCount(list1,list2))

14 小易有n根柱子,第i根柱子的高度为 h i h_i hi。一开始小易站在第一根柱子上。小易能从第i根柱子跳到第j根柱子,当且仅当 h j ≤ h i h_j \leq h_i hjhi 1 ≤ j − i ≤ k 1\leq j-i \leq k 1jik。其中k为指定的一个数字。

另外小易拥有一次释放超能力的机会。这个超能力能让小易从柱子i跳到任意满足 1 ≤ j − i ≤ k 1\leq j-i \leq k 1jik的柱子i而无视柱子高度的限制。
现在小易想知道,小易是否能到达第根柱子。

t = int(input())
for _ in range(t):
    n, k = list(map(int, input().split()))
    li = list(map(int, input().split()))
    dp = [[False, 1] for _ in range(n)]
    dp[0][0] = True
    for i in range(1, n):
        flag = False
        max1 = 0
        for j in range(max(0, i - k), i):
            if dp[j][0] == False:
                continue
            elif li[j] >= li[i]:
                dp[i] = dp[j].copy()
                max1 = max(max1, dp[j][1])
                dp[i][1] = max1
                flag = True
            elif li[j] < li[i] and not flag and dp[j][1]:
                dp[i] = dp[j].copy()
                dp[i][1] = 0
    if dp[-1][0]:
        print('YES')
    else:
        print('NO')

15小易的公司一共有n名员工, 第i个人每个月的薪酬是 x i x_i xi万元。

现在小易的老板向小易提了m次询问, 每次询问老板都会给出一个整数k, 小易要快速回答老板工资等于k的员工的数量。

from collections import Counter
n,m = map(int,input().split())
salary = list(map(int,input().split()))
frequency_dict = dict(Counter(salary))
 
for i in range(m):
    question = int(input())
    print(frequency_dict.get(question,0))

你可能感兴趣的:(笔试刷题,算法,链表,指针,数据结构,二叉树)