9 6位元組校招研發崗位筆試

2021-10-24 09:16:09 字數 1717 閱讀 3997

10/28/20更新第二題。

已經第無數次被dp錘爆了狗頭qaq。

走台階。一次可以走1步,也可以走2步。但是不能連著走2步。計算走n級台階的走法。

這一題我居然花了20分鐘,真是被自己菜哭了。

用乙個二維的dp陣列,分別記錄達到每一階台階的最後一步的方式。設定一下初始狀態。狀態轉移過程如下

dp[i][0

]= dp[i-1]

[0]+ dp[i-1]

[1];

dp[i][1

]= dp[i-2]

[0];

// 不能連著走兩步

注意這一題所有的索引都是1-based。定義函式l(i) = j,要求jarr[i]。如果沒有這樣的j,則j為0。否則,選取距離i最近的j。定義函式r(i) = k,要求k>i,且arr[k] > arr[i]。如果沒有這樣的k,則k為0。否則,選取距離i最近的k。現在給定乙個陣列arr,要求返回max(l[i]*r[i])。

這一題只通過了68%的case,因為用的是暴力解(被自己菜哭了*2)。實際上解法是單調棧。

public

class

main

stack

back =

newstack()

;int

r =

newint

[n];

back.

push

(n-1);

for(

int i = n-

2; i >=

0; i--

)int res =0;

for(

int i =

1; i < n-

1; i++

) res = math.

max(res, l[i]

*r[i]);

return res;

}public

static

void

main

(string[

] args)

;int res = m.

indexlr

(arr)

;// return 8, produced by number 0

system.out.

println

(res);}

}

給定乙個陣列,乙個整型m。將m個該陣列首尾相連。算max subarray(必須要取至少乙個元素)。這一題的難點在於這個m可以很大,所以是不能暴力拼接的。另外就是arr[i]的取值也有可能很大,返回值不能用int,否則溢位。

在倒數3分鐘除錯了出來orz。**量太大,導致bug有點多。

基本思路是分為3中情況。

(1)陣列不需要拼接(走一遍),取最大值返回。這種情況對應m=1或者陣列首尾有非常大的負數。

(2)陣列只拼接一次,最大值出現的範圍在第乙個陣列的末尾+第二個陣列的開頭。這種情況對應m=2或者陣列一端有非常大的負數。

(3)陣列需要拼接m次。但是不需要暴力拼接。算出陣列的和,*(m-1)就可以得到中間部分的和。再加上(2)情況的和即可。這種情況對應m>=3。

這幾種情況都是返回之前所有情況的最大值的。

給乙個陣列,乙個整型t。需要把陣列所有元素都變成t。可以進行的操作是把陣列[l:r+1]的元素都增加1。計算達到目的的不同方法的種類。光改變操作的順序是不算做不同方法的。

這題沒做。時間不夠了。

9 6 位元組跳動筆試

大概題意 有個樓梯比較高,問有多少種可以方式可以走上去,但有特殊得要求 一是每次可以走一步或者兩步,二是不能連續的走兩步 計算有多少種方法到達頂層 輸入 樓層的層數 輸出 一共有多少種走法 思路 直接dp就好了,設dp方程為dp i 2 dp i 0 表示走一步之後達到第i層,那麼轉移方程就是dp ...

2019位元組跳動秋招筆試

題目描述 小明目前在做乙份畢業旅行的規劃。打算從北京出發,分別去若干個城市,然後再回到北京,每個城市之間均乘坐高鐵,且每個城市只去一次。由於經費有限,希望能夠通過合理的路線安排盡可能的省一些路上的花銷。給定一組城市和每對城市之間的火車票的價錢,找到每個城市只訪問一次並返回起點的最小車費花銷。輸入描述...

2016 京東校招研發演算法題 9 6

第一題 爬山 思路 需要判斷第乙個有效資料,到第一天所能達到的最高高度,和最後乙個有效資料到最後一天能達到的最高高度。我這裡是用的乙個map來存放d,h。ac 1 include iostream 2 include map 3 define max 1000000145 using namespa...