[整理] 字節跳動 后台研發 Java 筆試題


[編碼題|20分] 找周期

時間限制:C/C++ 5秒,其他語言 10秒 
空間限制:C/C++ 65536K,其他語言 131072K 

題目描述 

對於嚴格遞增的正整數數列A=a1、a2、……、an,如果一個正整數T滿足: 
1)對於數列A中的任意元素x,如果x+T不大於an,則x+T也是數列A中的元素 
2)對於數列A中的任意元素x,如果x-T不小於a1,則x-T也是數列A中的元素 
那么稱T為數列A的周期,如果同時滿足: 
3)所有小於T的正整數,都不是A的周期 
則稱T為A的最小周期 
輸入描述: 
每組測試樣本的輸入格式為: 
第一行是一個正整數N 
從第二行開始,每行有若干個正整數,依次存放n、a1、a2、……、an,一共有N行,也就是N個數列。 
輸出描述: 
輸出有N行,每行打印出對應數列的最小周期。 
示例1 
輸入 

3 1 2 3 
3 2 4 6 
3 3 4 6 
輸出 



說明 
數據范圍: 
N:0

[編碼題|20分] 拼硬幣

時間限制:C/C++ 1秒,其他語言 2秒 
空間限制:C/C++ 65536K,其他語言 131072K 

題目描述 


現有n1+n2種面值的硬幣,其中前n1種為普通幣,可以取任意枚,后n2種為紀念幣,每種最多只能取一枚,每種硬幣有一個面值,問能用多少種方法拼出m的面值? 
8 輸入描述: 
第一行三個整數n1, n2, m,分別表示普通幣種類數,紀念幣種類數和目標面值 
第二行n1個整數,第i種普通幣的面值a[i]。保證a[i]為嚴格升序。 
第三行n2個整數,第i種紀念幣的面值b[i]。保證b[i]為嚴格升序。 
對於30%的測試,保證1<=n1+n2<=10,1<=m<=100,1<=a[i]<=100 1<=b[i]<=100 
對於100%的測試,保證1<=n1+n2<=100, 1<=m<=100000, 1<=a[i]<=100000 1<=b[i]<=100000 
輸出描述: 
輸出一行,包含一個數字x,表示方法總數對1000000007(1e9+7)取模的結果。 
注意:不要忘記取模! 
示例1 
輸入 
3 1 5 
1 2 3 

輸出 

說明 
(x)代表面值為x的普通幣,[x]代表面值為x的紀念幣,樣例所有方法數如下: 
(1)(1)(1)(1)(1) 
(1)(1)(1)(2) 
(1)(1)(3) 
(1)(2)(2) 
(2)(3) 
(1)(1)(1)(1)[1] 
(1)(1)1 
(1)1 
1(2) 
備注: 
兩個方法,它們任意一種或以上的硬幣數量不同,則認為是兩種拼法。

[編碼題|20分] 矩形游戲

時間限制:C/C++ 1秒,其他語言 2秒 
空間限制:C/C++ 65536K,其他語言 131072K 

題目描述 


小a在玩一個很簡單的游戲,游戲的內容是控制一個小人在一塊矩形的空地內走,一旦小人走出矩陣范圍,游戲就失敗。游戲機有上,下,左,右四個按鍵,每按一下小人就向相應的方向走一步。這個游戲過於簡單,小a說:“這種游戲我閉着眼睛玩都輸不了”。於是他便閉上眼睛,進行一連串的操作。但若他中途輸了的話就會停止。 
那么問題來了:給定小a的操作,進行Q次詢問,你能算出每次詢問小人能走多少步嗎? 
輸入描述: 
第一行為長度L的字符串S,每個字符依次代表小a的一次操作。’u’代表向上,’d’代表向下,’l’代表向左,’r’代表向右。字符串S不會包含其他字符。 
第二行是整數Q,代表Q次詢問 
接下來Q行,每行有四個整數,N,M,X,Y,保證1<=X<=N,1<=Y<=M,矩陣大小為N*M,小人初始位置為(X, Y)。 
對於30%的測試,0

[編碼題|20分] 有理數

時間限制:C/C++ 1秒,其他語言 2秒 
空間限制:C/C++ 65536K,其他語言 131072K 

題目描述 


升序數組中第一個是1, 后續為若干連續的素數,對於數組里面的元素m和n(m < n)都對應了一個有理數m / n, 現在給定這個數組和一個K,要求返回第K小的有理數。 
輸入描述: 
每組測試樣本的輸入格式為: 
第一行是一個正整數N 
從第二行開始,每行有若干個正整數,依次存放K、a1、……、an,一共有N行,也就是N組參數。 
K是輸入參數表示需要尋找的順序第K小的有理數, a1 - an 是以1開始后續n - 1個素數。 
輸出描述: 
輸出有N行,每行兩個數字m和n,空格隔開,分別表示第K小有理數的分子和分母。 
示例1 
輸入 

3 1 2 3 5 
輸出 
2 5 
備注: 
m、n必須為a1 - an中的滿足條件的兩個數。 
數據范圍為: 
10 <= N <= 20000 
10 <= K <= 20000 
1 <= m < n < 20000

[編碼題|20分] 電容充電

時間限制:C/C++ 1秒,其他語言 2秒 
空間限制:C/C++ 65536K,其他語言 131072K 

題目描述 


有一台用電容組成的計算器,其中每個電容組件都有一個最大容量值(正整數)。 
對於單個電容,有如下操作指令: 
指令1:放電操作 - 把該電容當前電量值清零 
指令2:充電操作 - 把該電容當前電量補充到其最大容量值 
對於兩個電容A和B,有如下操作指令: 
指令3:轉移操作 - 從A中盡可能多的將電量轉移到B,轉移不會有電量損失,如果能夠充滿B的最大容量,那剩余的電量仍然會留在A中 
現在已知有兩個電容,其最大容量分別為a和b,其初始狀態都是電量值為0,希望通過一系列的操作可以使其中某個電容(無所謂哪一個)中的電量值等於c(c也是正整數),這一系列操作所用的最少指令條數記為M,如果無論如何操作,都不可能完成,則定義此時M=0。 
顯然對於每一組確定的a、b、c,一定會有一個M與其對應。 
輸入描述: 
每組測試樣本的輸入格式為: 
第一行是一個正整數N 
從第二行開始,每行都是3個正整數依次組成一組a、b、c,一共有N組 
輸出描述: 
輸出為N行,每行打印每一組的對應的M 
示例1 
輸入 

3 4 2 
2 3 4 
輸出 


說明 
對於(3,4,2),最少只需要4個指令即可完成: 
(設最大容量為3的是A號電容,另一個是B號電容) 
充電 A轉移 A->B充電 A轉移 A->B 
此時A中當前電量為2,操作完成,所以輸出4。 
對於(2,3,4),顯然不可能完成,輸出0。 
備注: 
數據范圍: 
N:0

 

車廂排序

一列火車有n個車廂標記為1,2,3,4,5,6…n 
現在因為某些原因,需要調整車廂的相對順序 
例如需要將車廂順序調整為2,3,1,4,5,6…n 
由於車廂龐大,且車廂只能停留在鐵軌上,所以不能隨心所欲的調整相對順序

現在只能利用兩條並行的鐵軌對車廂的順序進行調整 
例如 
原序列為1,2的車廂 
車廂1進入鐵軌1停止 
車廂2進入鐵軌2,然后再開出 
然后鐵軌1上的車廂1再開出 
這樣可以使得車廂2調整到車廂1得前面

現在給你一個期望得到的車廂順序,請你判斷該順序能否通過以上方法調整車廂順序而得到 
(車廂只能前進無法后退) 
輸入格式 
第一行n表示有n個車廂 
第二行有n個數為1~n的排列用空格隔開,表示期望得到的車廂順序

輸出:若可以得到則輸出Yes 否則輸出No

樣例輸入1: 

2 1 
樣例輸出1: 
Yes

樣例輸入2: 

3 4 1 5 2 
樣例輸出2: 
Yes

樣例輸入3: 

3 4 2 1 5 
樣例輸出3: 
No

 

出題數量

一些出題人出了n道題,每道題有一個難度系數,難度系數滿足以下關系的3道題可以組成一套試卷,為了使這n道題使用上且只能使用一次,問出題人最少還要出多少題?

a<=b<=c

b-a<=10;

c-b<=10;

 

 

筆試題目

選擇填空的內容為:計組、概率論、其他高中數學基本知識

編程題1:輸入16進制數(1,2…f..)組成的矩陣,由左上角開始,到右下角,只能向右或下走,找出另走過的數的乘積的16進制數后綴0最少的方法。

編程題2:給定長度為n序列,分割成m段,找出令分割后 “數值之和最大的段” 最小的分割方法

選擇填空重點:

      • 計組:四路組相連+RLU 
        1、FIFO – 先進先出 
        如果一個數據最先進入緩存中,則應該最早淘汰掉。 
        2、LRU – 最近最久未使用 
        應當把最久沒有被訪問到的數據淘汰。 
        3、LFU – 最近最少使用 
        一個數據在最近一段時間內使用次數最少
      • 概率論: 已知A、B都條件獨立於C,已知P(A|C)、P(B|C),問P(A|B,C)?

      • 已知一個一元四次方程,給了f(1)、f(2)、..f(5)的值,問f(6)?

      • 問檢驗假設、置信區間

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM