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...