日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

字节跳动2019春招第二次笔试编程题

發(fā)布時(shí)間:2024/3/24 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字节跳动2019春招第二次笔试编程题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

字節(jié)跳動(dòng)2019春招第二次筆試編程題

    • 1.變身程序員
      • 題目描述
      • 輸入描述
      • 輸出描述
      • 示例
        • 示例1
        • 示例2
        • 示例3
      • 分析
      • 參考代碼
    • 2.特征提取
      • 題目描述
      • 輸入描述
      • 輸出描述
      • 示例
        • 示例1
      • 備注
      • 分析
      • 參考代碼
    • 3.機(jī)器人跳躍問(wèn)題
      • 題目描述
      • 輸入描述
      • 輸出描述
      • 示例
        • 示例1
        • 示例2
        • 示例3
      • 備注
      • 分析
      • 參考代碼
    • 4.畢業(yè)旅行問(wèn)題
      • 題目描述
      • 輸入描述
      • 輸出描述
      • 示例
        • 示例1
      • 分析
      • 參考代碼
    • 4.過(guò)河問(wèn)題
      • 題目描述
      • 輸入描述
      • 輸出描述
      • 示例
        • 示例1
      • 分析
      • 參考代碼

個(gè)人主頁(yè):http://redtongue.cn or https://redtongue.github.io/

1.變身程序員

題目描述

公司的程序員不夠用了,決定把產(chǎn)品經(jīng)理都轉(zhuǎn)變?yōu)槌绦騿T以解決開(kāi)發(fā)時(shí)間長(zhǎng)的問(wèn)題。

在給定的矩形網(wǎng)格中,每個(gè)單元格都可以用以下三個(gè)值之一:

  • 值0代表空單元格

  • 值1代表產(chǎn)品經(jīng)理

  • 值2代表程序員

每分鐘,任何與程序員(在四個(gè)正方向上)相鄰的產(chǎn)品經(jīng)理都會(huì)變成程序員。
返回知道單元格中沒(méi)有產(chǎn)品經(jīng)理為止所必須經(jīng)過(guò)的最小分鐘數(shù)。
如果沒(méi)有可能,返回-1.

輸入描述

不固定多行(行數(shù)<=10),每行是按照空格分割的數(shù)字(不固定,每行數(shù)字個(gè)數(shù)<=10) 其中每個(gè)數(shù)組項(xiàng)的取值僅為0,1,2三種 (讀取時(shí)可以按行讀取,知道讀取到空行為止,再對(duì)讀取的所有行做轉(zhuǎn)換處理)

輸出描述

如果能夠?qū)⑺械漠a(chǎn)品經(jīng)理變?yōu)槌绦騿T,則輸出最小的分鐘數(shù) 如果不能夠?qū)⑺械漠a(chǎn)品經(jīng)理變?yōu)槌绦騿T,則返回-1

示例

示例1

輸入: 0 2 1 0 輸出: -1

示例2

輸入: 1 2 1 1 1 0 0 1 1 輸出: 3

示例3

輸入: 1 2 2 1 1 2 0 1 0 1 1 1 輸出: 4

分析

  • 深度優(yōu)先搜索,區(qū)別在每一次(每分鐘)只會(huì)將程序員周圍的產(chǎn)品經(jīng)理變?yōu)槌绦騿T,不會(huì)迭代下去
  • manage記錄產(chǎn)品經(jīng)理的個(gè)數(shù),若每一個(gè)傳播之后,manage不再變化,停止;
  • 若manage=0返回傳播時(shí)間,反之返回-1。

參考代碼

import sys if __name__ == "__main__":def get(A):s=0for a in A:for x in a:if(x==1):s+=1return slines = sys.stdin.readlines()a=[]for line in lines:a.append(list(map(int,line.split())))s=0print("a",a)manage=get(a)row=len(a)col=len(a[0])def dfs(x,y):if(x-1>=0 and a[x-1][y]==1):a[x-1][y]=2if(x+1<row and a[x+1][y]==1):a[x+1][y]=2if(y-1>=0 and a[x][y-1]==1):a[x][y-1]=2if(y+1<col and a[x][y+1]==1):a[x][y+1]=2returnwhile(manage>0):li=[]for i in range(row):for j in range(col):if(a[i][j]==2):li.append((i,j))for l in li:dfs(l[0],l[1])nmanage=get(a)print(a)s+=1if(manage==nmanage):breakmanage=nmanageif(manage==0):print(s)else:print('-1')

2.特征提取

題目描述

小明是一個(gè)算法工程師,同時(shí)也是一名鏟屎官。某天,他突發(fā)奇想,想從貓咪的視頻里挖掘一些貓咪的運(yùn)動(dòng)信息。為了提取運(yùn)動(dòng)信息,他需要從視頻的每一幀提取“貓咪特征”。一個(gè)貓咪特征是一個(gè)兩維的vector<x,y>。如果x_1=x_2 and y_1=y_2,那么這倆是同一個(gè)特征。

因此,如果貓咪特征連續(xù)一致,可以認(rèn)為貓咪在運(yùn)動(dòng)。也就是說(shuō),如果特征<a,b>在持續(xù)幀里出現(xiàn),那么它將構(gòu)成特征運(yùn)動(dòng)。比如,特征<a,b>在第2/3/4/7/8幀出現(xiàn),那么該特征形成兩個(gè)特征運(yùn)動(dòng)2-3-4和7-8.

輸入描述

第一行包含一個(gè)正整數(shù)N,代表測(cè)試用例的個(gè)數(shù) 每個(gè)測(cè)試用例的第一行包含一個(gè)正整數(shù)M,代表視頻的幀數(shù) 接下來(lái)M行,每一行代表一幀,其中,第一個(gè)數(shù)字是該幀的特征個(gè)數(shù),接下來(lái)的數(shù)字是在特征的取值:比如樣例輸入第三行里,2表示該幀有兩個(gè)貓咪特征,<1,1>和<2,2>。所有用例的輸入特征總數(shù)和<=100000 N滿足1<=N<=100000,M滿足1<=M<=100000,一幀的特征個(gè)數(shù)滿足<=100000.特征取值均為非負(fù)整數(shù)

輸出描述

對(duì)于每一個(gè)測(cè)試用例,輸出特征運(yùn)動(dòng)的長(zhǎng)度作為一行

示例

示例1

輸入: 1 8 2 1 1 2 2 2 1 1 1 4 2 1 1 2 2 2 2 2 1 4 0 0 1 1 1 1 1 1 輸出: 3

備注

如果沒(méi)有長(zhǎng)度大于2的特征運(yùn)動(dòng),返回1

分析

  • 用字典存儲(chǔ)每個(gè)特征出現(xiàn)的次數(shù),ans記錄特征出現(xiàn)的最大次數(shù),初始為0
  • 遍歷每一幀的特征,若字典中存在該特征,則次數(shù)加一,反正說(shuō)明該特征斷了,次數(shù)置為1,更新ans
  • 返回ans

參考代碼

if __name__ == "__main__":N=int(input())for n in range(N):M=int(input())d={}ans=1for m in range(M):li=list(map(int,input().split()))s=li[0]newd={}for i in range(s):ind=(li[i*2+1],li[i*2+2])if(ind in d):newd[ind]=d[ind]+1else:newd[ind]=+1for nd in newd:ans=max(ans,newd[nd])d=newdprint(ans)

3.機(jī)器人跳躍問(wèn)題

題目描述

機(jī)器人正在玩一個(gè)古老的基于DOS的游戲。游戲中有N+1座建筑----從0到N編號(hào),從左到右排列。編號(hào)為0的建筑高度為0個(gè)單位,編號(hào)為i的建筑的高度為H(i)個(gè)單位。

起初,機(jī)器人在編號(hào)為0的建筑處。每一步,它跳到下一個(gè)(右邊)建筑。假設(shè)機(jī)器人在第k個(gè)建筑,且它現(xiàn)在的能量值是E,下一步它將跳到第k+1建筑。他將會(huì)得到或者失去正比于H(K+1)和E之差的能量。如果H(k+1)>E那么機(jī)器人就失去H(K+1)-E的能量值,反之它將得到E-H(K+1)的能量值

游戲目標(biāo)是到達(dá)第N個(gè)建筑,在這個(gè)過(guò)程中,能量值不能為負(fù)。現(xiàn)在的問(wèn)題是機(jī)器人以多少能量值開(kāi)始游戲,才可以保證完成游戲

輸入描述

第一行輸入,表示一共有N組數(shù)據(jù) 第二個(gè)是N個(gè)空格分割的整數(shù),H1,H2,H3,...,Hn代表建筑的高度

輸出描述

輸出一個(gè)單獨(dú)的數(shù)表示完成游戲所需的最小單位的初始能量

示例

示例1

輸入: 5 3 4 3 2 4 輸出: 4

示例2

輸入: 3 4 4 4 輸出: 4

示例3

輸入: 3 1 6 4 輸出: 3

備注

數(shù)據(jù)約束:
1<=N<=10^5
1<=H(i)<=10^5

分析

  • 用二分查找來(lái)找到最小能量值,start=0,end=max(H),高度小于能量值時(shí),能量只增不減,座椅最大值為max(H);
  • 遍歷建筑物,更新E值,若中間E小于0,則更新start=mid+1;
  • 反之end=mid;
  • 最后返回end。

參考代碼

if __name__ == "__main__":N=int(input())H=list(map(int,input().split()))start=0end=max(H)while(start<end):mid=(start+end)//2E=midjudge=Truefor h in H:if(E < h):E-=(h-E)else:E+=(E-h)if(E < 0):start=mid+1judge=Falsebreakif(judge):end=midprint(end)

4.畢業(yè)旅行問(wèn)題

題目描述

小明目前在做一份畢業(yè)旅行的規(guī)劃。打算從北京出發(fā),分別去若干個(gè)城市,然后再回到北京,每個(gè)城市之間均乘坐高鐵,且每個(gè)城市只去以此。由于經(jīng)費(fèi)有限,希望能夠通過(guò)合理的路線安排盡可能的省一些路上的開(kāi)銷。給定一組城市和每對(duì)城市之間的火車票的價(jià)錢,找到每個(gè)城市只訪問(wèn)一次并返回起點(diǎn)的最小花銷。

輸入描述

城市個(gè)數(shù)n(1<=n<=20,包括北京) 城市間的車票價(jià)錢,n行n列的矩陣m[n][n]

輸出描述

最小花銷s

示例

示例1

輸入: 4 0 2 6 5 2 0 4 4 6 4 0 2 5 4 2 0 輸出: 13 說(shuō)明: 共四個(gè)城市,城市1與城市1的車費(fèi)是0,城市1和城市2的車費(fèi)是2,以此類推,無(wú)需考慮極端情況。

分析

  • 遍歷所有城市,得到每個(gè)狀態(tài)下的最小車費(fèi),s是車費(fèi),past記錄已遍歷的城市包含的車票,形如<a,b>是指從a城市到b城市,初始為{(0,0)},只包含一個(gè)城市,車費(fèi)為0;

  • 遍歷,新增加一個(gè)城市i,遍歷所有的車票<a,b>,使得<i,a>+<i,b>-<a,b>最小,即遍歷當(dāng)前城市最小的花費(fèi);

  • 更新past和s;

  • 遍歷完,返回s。

參考代碼

if __name__ == "__main__":n=int(input())m=[]for i in range(n):m.append(list(map(int,input().split())))s=0past=set()past.add((0,0))for i in range(1,n):a,b=0,0cost=m[i][a]+m[i][b]for p in past:c=m[p[0]][i]+m[p[1]][i]-m[p[0]][p[1]]if(c < cost):a=p[0]b=p[1]cost=cs+=costpast.remove((a,b))past.add((a,i))past.add((i,a))print(s)

4.過(guò)河問(wèn)題

題目描述

將所有人送到河對(duì)面,每次只能做2或3個(gè)人,且時(shí)間是船上人過(guò)河時(shí)間的最大值。

輸入描述

第一行是整數(shù)m,表示測(cè)試樣例格式 每個(gè)測(cè)試樣例的第一行是一個(gè)正整數(shù)n,表示參加過(guò)河的人數(shù);(2<=n<100000) 第二行是n個(gè)正整數(shù)a[i](0<a[i]<100000),表示n個(gè)人的單獨(dú)過(guò)河時(shí)間

輸出描述

每個(gè)測(cè)試樣例,輸出應(yīng)該準(zhǔn)備的最少過(guò)河時(shí)間。

示例

示例1

輸入: 2 2 1 2 4 1 1 1 1 輸出: 2 3

分析

  • 用貪心算法來(lái)解,分為五種情況,time記錄耗時(shí):

  • 1人數(shù)大于等于7時(shí),按耗時(shí)排序得(a,b,c,d,***,m3,m2,m1),先將最耗時(shí)的三人送過(guò)去,三個(gè)同時(shí)過(guò)去耗時(shí)(2d+c+b+m1),先送過(guò)去兩個(gè),再送過(guò)去一個(gè),耗時(shí)(2c+2b+m1+m3),逐個(gè)送過(guò)去,耗時(shí)(3b+m1+m2+m3),耗時(shí)為三種情況的最小值;

  • 2人數(shù)大于等于6時(shí),按耗時(shí)排序得(a,b,c,***,m3,m2,m1),先將最耗時(shí)的三人送過(guò)去,三個(gè)同時(shí)過(guò)去耗時(shí)(2m3+c+b+m1),先送過(guò)去兩個(gè),再送過(guò)去一個(gè),耗時(shí)(2c+2b+m1+m3),逐個(gè)送過(guò)去,耗時(shí)(3b+m1+m2+m3),耗時(shí)為三種情況的最小值;

  • 3人數(shù)等于五個(gè)人時(shí),按耗時(shí)排序得(a,b,c,d,e),最大兩個(gè)先過(guò)去后面三個(gè)再過(guò)去,耗時(shí)(e+3c+b),逐個(gè)過(guò)去,耗時(shí)(e+d+c+2b);

  • 4人數(shù)等于四個(gè)人時(shí),按耗時(shí)排序得(a,b,c,d),耗時(shí)(b+c+d);

  • 5人數(shù)等與三或二個(gè)人時(shí),耗時(shí)最大耗時(shí)值;

  • 返回time。

參考代碼

if __name__ == "__main__":N=int(input())for i in range(N):n=int(input())a=list(map(int,input().split()))a.sort()time=0start=0end=n-1while(end-start+1>=7):p1=a[end]+a[start+1]*2+a[start+2]+a[start+3]*2#過(guò)兩個(gè)小的,再將三個(gè)最大的一起過(guò)去p2=a[end]+a[end-2]+a[start+1]*2+a[start+2]*2#過(guò)一個(gè)小的,將兩個(gè)最大的過(guò)去,再過(guò)去一個(gè)大的p3=a[end]+a[end-1]+a[end-2]+a[start+1]*3#逐個(gè)過(guò)最大的time+=min(p1,p2,p3)end-=3while(end-start+1>=6):p1=a[end]+a[start+1]*2+a[start+2]+a[start+3]*2p2=a[end]+a[end-2]+a[start+1]*2+a[start+2]*2p3=a[end]+a[end-1]+a[end-2]+a[start+1]*3time+=min(p1,p2,p3)end-=3if(end-start+1==5):p4=a[end]+a[start+1]+a[start+2]*3p5=a[start+1]*2+a[start+2]+a[start+3]+a[start+4]time+=min(p4,p5)end=-1if(end-start+1==4):time+=sum(a[start+1:end+1])end=-1if(end-start+1>=2):time+=max(a[start:end+1])print(time)

總結(jié)

以上是生活随笔為你收集整理的字节跳动2019春招第二次笔试编程题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。