1. 程式人生 > >2019演算法崗阿里筆試程式設計題

2019演算法崗阿里筆試程式設計題

程式設計題一共兩道,博主是個菜雞,有幸被阿里虐了一遍,筆試結束後整理了一下題目和自己的答案,希望對各位有個參考,放正文前,先放一張圖,今年阿里和商湯的筆試時間有衝突,網上對於阿里和商湯的筆試評價如下圖:
阿里的程式設計題真的好接地氣,感覺就是把專案中的一個小小的部分拿來了吧,完全打個措手不及;
這裡寫圖片描述

開始正文

阿里:程式設計題1

這裡寫圖片描述

請使用標準輸出(sys.stdout);已禁用圖形、檔案、網路、系統相關的操作,如Process , httplib , os;縮排可以使用tab、4個空格或2個空格,但是隻能任選其中一種,不能多種混用;如果使用sys.stdin.readline,因為預設會帶換行符,所以要strip(’ ‘)進行擷取;建議使用raw_input()
時間限制: 3S (C/C++以外的語言為: 5 S) 記憶體限制: 128M (C/C++以外的語言為: 640 M)
輸入:
輸入資料包含兩行,
第一行,實體列表,多種實體之間用分號隔開,實體名和實體值之間用下劃線隔開,多個實體值之間用豎線隔開,所有標點都是英文狀態下的,格式如下:
實體名稱1_實體值1|實體值2|…;實體名稱2_實體值1|實體值2|…;…
第二行,使用者的自然語言指令
輸出:
被標記了關鍵詞的指令。指令中的關鍵詞前後加一個空格被單獨分出來,並在後面跟上”/”+實體名稱來標記。如果一個實體值屬於多個實體,將這些實體都標記出來,並按照實體名稱的字串順序正序排列,並以逗號分隔。
輸入範例:


singer_周杰|周杰倫|劉德華|王力巨集;song_冰雨|北京歡迎你|七里香;actor_周杰倫|孫儷
請播放周杰倫的七里香給我聽
輸出範例:
請播放 周杰倫/actor,singer 的 七里香/song 給我聽

個人答案,說到底就是字串的處理問題,我先將關鍵字部分暴力搜尋提取出來放在一個雜湊表裡,然後根據輸入的情況,不斷從雜湊表裡查詢,輸出結果,這裡放上自己的答案,沒有全部AC,有問題請各位指出:


def Solve(inputs, dicts):
    res = ""
    i = len(inputs) - 1
    while i>=0:
        j = i - 1
s = inputs[j:i+1] while j>=0 and s not in dicts: j -= 1 s = inputs[j:i+1] if s in dicts: res = ' ' + s + '/' + dicts[s] + ' '+ res i = j-1 else: res = inputs[i] + res i -= 1 return res import
sys if __name__ == '__main__': ss = input().split(';') dicts = {} names = [] for s in ss: s = s.split('_') s[1] = s[1].split('|') for i in range(len(s[1])): key = s[1][i] if key not in dicts: dicts[key] = s[0] else: dicts[key] = dicts[key] + ',' + s[0] names += s[1] strings = input() res = Solve(strings, dicts) sys.stdout.write(res + '\n')

測試結果:
我的Linux沒有中文的,所以我就直接提取了每個字的第一個字母代替這個字做測試;
輸入:

singer_zj|zjl;song_by|qlx;actor_zjl|sl
qbfzjldqlxgwt

輸出情況:
這裡寫圖片描述
從單個測試結果來看,還是正確的,但是不確定中文情況下行不行,我的結果也沒有全部AC

阿里程式設計第二題

這裡寫圖片描述
請使用標準輸出(sys.stdout);已禁用圖形、檔案、網路、系統相關的操作,如Process , httplib , os;縮排可以使用tab、4個空格或2個空格,但是隻能任選其中一種,不能多種混用;如果使用sys.stdin.readline,因為預設會帶換行符,所以要strip(’ ‘)進行擷取;建議使用raw_input()
時間限制: 3S (C/C++以外的語言為: 5 S) 記憶體限制: 128M (C/C++以外的語言為: 640 M)
輸入:
輸入資料包含兩行,
第一行,上述格式的語義模板表示式
第二行,使用者的自然語言指令(即:使用者query)
輸出:
當前query是否匹配當前語義模板表示式。匹配,則輸出1,否則輸出0.
輸入範例:
<[播]放|來>[一|幾]<首|曲|個>@{singer}的<歌[曲]|[流行]音樂>
來幾首@{singer}的流行歌曲
輸出範例:
0

這個題沒做出來,好麻煩,事後做了一下,純暴力切割字串,一個個做匹配,程式碼一點也不符合信達雅原則,請輕噴:

def inprocess(strings):
    dicts = {'<':'>', '>':'<', '[':']', ']':'[' }

    flag = []
    i = 0
    res = []
    start = 0
    # split inputs to many strings
    while i <len(strings):
        s = strings[i]
        if s=='<' or s=='[':
            flag.append(s)
            if strings[start]=='@':
                res.append(strings[start:i])
                start = i

        elif flag and s==dicts[flag[-1]]:
            tmp = flag.pop()
            if flag:
                continue
            else:
                res.append(strings[start+1:i])
                start = i+1
            del tmp

        i += 1

    # process the res
    collect = []
    for id, lists in enumerate(res):
        if '|' not in lists:
            collect.append(lists)
            continue

        lists = lists.split('|')
        for s in lists:
            i = 0
            # while i < len(s):
            if s[i]=='[':
                collect.append(s[i+1:s.index(']')])
                i = s.index(']')+1
                if i<len(s):
                    collect.append(collect[-1]+s[i:])

            elif '[' not in s:
                collect.append(s)
    for c in res:
        print(c)
    print(collect)
    return collect

def testing(qurry, collect):
    i = 0
    while i<len(qurry):
        c = qurry[i]
        if c in collect:
            collect = collect[collect.index(c)+1:]
        elif c=='@':
            if qurry[i:qurry.index('}')+2] in collect:
                i = qurry.index('}') + 1
            else:
                return 0
        else:
            return 0
        i += 1
    return 1


if __name__ == '__main__':
    inputs = "<[B]F|L>[Y|J]<S|Q|G>@{singer}G<[Q]|[LX]YL>"
    res = inprocess(inputs)

    qurry = "[email protected]{singer}GLXGQ"

    print(testing(qurry, res))

我想的是:來幾首@{singer}的流行歌曲測試結果為0可能是流行和歌曲放反了???只能是歌曲,流行,流行音樂???喵喵喵???

測試結果:
這裡寫圖片描述

相關推薦

2019演算法阿里筆試程式設計

程式設計題一共兩道,博主是個菜雞,有幸被阿里虐了一遍,筆試結束後整理了一下題目和自己的答案,希望對各位有個參考,放正文前,先放一張圖,今年阿里和商湯的筆試時間有衝突,網上對於阿里和商湯的筆試評價如下圖: 阿里的程式設計題真的好接地氣,感覺就是把專案中的一個小小

2019秋招】攜程資料分析筆試程式設計——畫心形

畫心形 題目描述: 你需要在一個10*10的點陣中,根據制定的兩個頂點,畫出一個符合要求的心形,如下如: 輸入描述: 你會得到兩組引數,代表這心形上端兩個點的座標,(x1,y1),(x2,y2)代表這兩點所在的行列,如上圖,你得到的座標為(2,3),(2,7)

【順豐科技】 2019校招 人工智慧與機器學習工程師線上考試 筆試程式設計

#!/bin/python # -*- coding: utf8 -*- import sys import os import re #請完成下面這個函式,實現題目要求的功能 #當然,你也可以不按照下面這個模板來作答,完全按照自己的想法來 ^-^ #**

2018年貝殼網校招(秋招)演算法筆試程式設計

1、題目描述: 給定一個長度為N的序列A1到AN,求所有區間[L,R](1≤L≤R≤N)的極差之和,其中區間[L,R]的極差定義為AL到AR中的最大值與最小值之差。 思路:暴力求解,通過率36% 程式碼如下: # -*- coding:utf-8 -*- cl

2019網易秋招筆試 程式設計:俄羅斯方塊

題目:俄羅斯方塊 小易有一個古老的遊戲機,上面有著經典的遊戲俄羅斯方塊。因為它比較古老,所以規則和一般的俄羅斯方塊不同。 熒幕上一共有 n 列,每次都會有一個 1 x 1 的方塊隨機落下,在同一列中,後落下的方塊會疊在先前的方塊之上,當一整行方塊都被

360 2019校招筆試 程式設計-2018.08.27

思路: 題目要求城市是平行於座標軸的正方形,我們只需要求出最大的橫座標差和最大的縱座標軸之差,取較大值作為正方形城市邊長即可 程式碼: #include <iostream>

2019網易秋招筆試 程式設計:塔

題目 小易有一些立方體,每個立方體的邊長為1,他用這些立方體搭了一些塔。 現在小易定義:這些塔的不穩定值為它們之中最高的塔與最低的塔的高度差。 小易想讓這些塔儘量穩定,所以他進行了如下操作:每次從某座塔上取下一塊立方體,並把它放到另一座塔上。 注

2017校招去哪網,阿里,網易,中興,華為筆試程式設計五則(Python描述)

前言 學長忙著找工作,今天幾輪筆試,把能拍到的筆試題都給我寫了寫,我想對明年找工作或者實習有所幫助 第一題,去哪網筆試題 題目我個人感覺難度還可以,我自己寫了好久,三道題,一道重複,還有一題同學沒拍到,總共時間給兩個小時,時間給的久,相比有

2018年秋招阿里筆試程式設計

題目1:     只需開口說話就能控制計算機做自己想做的事情,這種新奇的人機互動方式已經從科幻小說進入了現實世界。那麼機器是如何理解人說的話呢?這是一個複雜的過程,其中一個重要的任務就是教會機器理解話語中的重點,即關鍵詞。比如對機器人說“請播放周杰倫的青花瓷”

OPPO 2019校園招聘C/C++開發工程師(手機方向) 筆試程式設計-2018.09.10

思路: 1. 分割字串,提取數字 2. multimap儲存 3. 遍歷找到相應結果輸出 #include <iostream> #include <map> #

順豐科技 2019校園招聘筆試程式設計-2018.09.15

這道題 63%通過率,沒找到AC程式碼,先記錄一下 堆排序,63%程式碼: #include <bits/stdc++.h> using namespace std;

某公司筆試程式設計

參加了某公司程式設計題,這些題都來自牛客網,記錄總結吧! 一、蛇形矩陣 題目描述 蛇形矩陣是有1開始的自然數依次排列成的一個上三角矩陣. 介面說明 void GetResult(int Num, int* pResult); 輸入引數: int Num

線上筆試程式設計

現在給出N個長度都為L的單詞,單詞中僅包含大寫英文字母(A-Z)。你可以從所有單詞的第一個字母中挑一個作為拼詞的第一個字母,第二個字母中挑一個作為拼詞的第二個字母...以此類推。 比如給出N=3個L=4的單詞: CAKE TORN SHOW 你可以(但不僅限於)拼出以下單詞:

2019美團校招一道程式設計

樣例輸入: 4 20 20 100 60 50 30 80 55 100 60 110 88 5 3 10 6 樣例輸出: 94   分析: 經典01揹包問題參考:https://blog.csdn.net/u011321546/article

科大訊飛-筆試程式設計-數蚊子

數蚊子 時間限制:C/C++語言 1000MS;其他語言 3000MS記憶體限制:C/C++語言 65536KB;其他語言 589824KB 題目描述: 現在有一個蚊帳,假如用矩形體來表示一個蚊帳,為了方便描述,將該長方體的三個面放在X,Y,Z座標面上。那麼該矩形體的一個頂點就是(0

9.12 迅雷筆試程式設計

A 題意: 求素勾股個數 思路: 參考. #include <iostream> #include <algorithm> #include <string&g

2018年百度秋季招聘C++開發工程師筆試程式設計

題意為從一個亂序陣列中,將其中的整數按照出現的頻次多少來排列(並且出現幾次就排列幾個),比如輸入為[1,2,1,2,3,3,1,6,4,4,4,4],那麼輸出就應該為[4,4,4,4,1,1,1,2,2,3,3,6],其中,如果某兩個數字的出現頻次相同,那麼就按照輸入用例中的

9.15 愛奇藝筆試程式設計

局長的食物 #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib

9.16 騰訊筆試程式設計ac程式碼

思路: 求lcm(1, 2, …, n, …, m) = lcm(n + 1, …, m) 根據算數基本定理 #include <cstdio> #include <cstring> #include <cmath> #i

小米 秋招 筆試 程式設計 句子反轉

題目 句子反轉 時間限制:1秒 空間限制:32768K 熱度指數:55050 演算法知識視訊講解 校招時部分企業筆試將禁止程式設計題跳出頁面,為提前適應,練習時請使用線上自測,而非本地IDE。 題目描述 給定一個句子(只包含字母和空格), 將句子中的單詞位置反