2018迅雷校招人工智能工程师笔试编程题

题型是单选、多选和编程。选择题问的基本上都是机器学习的基础算法题,比如梯度下降,神经网络,SVM之类的,两道编程题也比较容易,首次所有的编程题都AC,道阻且长呀~

1.第一题如下:

2018迅雷校招人工智能工程师笔试编程题_第1张图片

思路是:先对两个数组进行排序(降序),然后求出两个数组中各取出一个数字的所有和(之前有总结过,list定义时用循环嵌套,相当于排列组合),再排序,输出给定的前n个,输出时要注意转为字符串。

代码如下:

# -*- coding:utf-8 -*-
def find_max(a,b,num):
    a.sort(reverse=True)
    b.sort(reverse=True)
    res_list = []
    for m in a:
        for n in b:
            res_list.append(m+n)

    res_list.sort(reverse=True)
    res = res_list[:num]
    print ','.join(str(i) for i in res)

if __name__ == "__main__":
    read_in = raw_input().split('-')
    a_list = [int(i) for i in read_in[0].split(',')]
    b_list = [int(i) for i in read_in[1].split(':')[0].split(',')]
    num = int(read_in[1].split(':')[1])
    find_max(a_list, b_list, num)

2.第二题如下:

2018迅雷校招人工智能工程师笔试编程题_第2张图片

思路为:看了hint之后觉得可以用集合来做,我的做法感觉还是有点啰嗦,有更好的方法的伙伴欢迎留言讨论呀。

遍历数组,添加此元素,左边的和,右边的和到集合中,如果集合的len为1,说明这三个元素相等,则添加到结果列表中。

代码如下:

# -*- coding:utf-8 -*-

def find_sp_num(a):
    res_list = []
    if len(a) < 3:
        print 'False'
    elif len(a) == 3:
        if len(set(a)) == 1:
            print a[0]
        else:
            print 'False'
    else:
        for i in range(1, len(a)):
            res = set()
            left_sum = 0
            right_sum = 0
            left = a[:i]
            right = a[i+1:]
            for n in left:
                left_sum += n
            for m in right:
                right_sum += m
            res.add(left_sum)
            res.add(a[i])
            res.add(right_sum)
            if len(res) == 1:
                res_list.append(a[i])
        if len(res_list) != 0:
            print res_list[0]
        else:
            print 'False'

if __name__ == "__main__":
    a_list = [int(i) for i in raw_input().split(',')]
    find_sp_num(a_list)

 

你可能感兴趣的:(面试算法题)