1. 程式人生 > >迅雷--2018校招AI演算法筆試題

迅雷--2018校招AI演算法筆試題

程式設計題

1.

  • 輸入: 每行數字短橫符-分隔兩個陣列,冒號分隔:引數K
  • 輸出: 輸出為和最大的K個數,和是兩個陣列中各一個數相加而得
  • 樣例輸入: 2,4,2,7,7- 3,2,5,6,1,9:6
  • 樣例輸出: 16,16,13,13,13,12
  • hint: 注意效能

思路: 先對兩個陣列進行排序(降序),然後求出兩個陣列中各取出一個數字的所有和(之前有總結過,list定義時用迴圈巢狀,相當於排列組合),再排序,輸出給定的前n個,輸出時要注意轉為字串。

def find_max(a,b,num):
    a.sort(reverse=True)
    b.sort(reverse=True)
    res_list = []
    for i in a:
        for j in b:
            res_list.append(i+j)
    res_list.sort(reverse=True)
    res = res_list[:num]
    print ','.join(str(i) for i in res)

2. 給定一維陣列,要求找出陣列中一個數,使得該數等於左邊之和同時也等於右邊之和,如果有多個僅輸出第一個,如果沒有則返回false

  • 輸入:每行數字為一個數組,陣列元素用逗號分隔
  • 輸出:要求輸出為一個數字或者false
  • 樣例輸入:3,1,4,4
  • 樣例輸出:4
  • hint: 注意效能和類型別轉換

思路: 遍歷陣列,新增此元素,左邊的和,右邊的和到集合中,如果集合的len為1,說明這三個元素相等,則新增到結果列表中。

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'

有更好的辦法歡迎指導!