首先這題可以和粉刷房子這題一樣解法,對於i號房子,遍歷k種顏色,對於每一種,都去找i-1號房子除該顏色之外的最小花費。但上一題是3種顏色,總複雜度o(n),這題k種顏色,複雜度o(nk^2),題目要求o(nk),則對於i號房子我們儲存下當前房子最小的花費以備i+1號房子使用,但因為相鄰房子不能塗相同顏色的油漆。假設對於i號房子最小花費是塗x號油漆,則對於i+1號房子來說,一定不能塗x號了。解決辦法是我們對於每乙個房子,儲存最小花費min和次最小花費2_min。對於下乙個房子,塗某種油漆時不能使用min,即油漆號等於min所對應的油漆號時,此時只能使用2_min。除此之外,都使用min。
class
solution
int pre_min_index=-1
,pre_min_cost=
0,pre_2min_cost=0;
for(
int i=
0;isize()
;++i)
else
if(costs[i]
[j]else
if(costs[i]
[j]} pre_min_index=cur_min_index;
pre_min_cost=cur_min_cost;
pre_2min_cost=cur_2min_cost;
// cout
return pre_min_cost;}}
;
265 粉刷房子 II
題目描述 假如有一排房子,共 n 個,每個房子可以被粉刷成 k 種顏色中的一種,你需要粉刷所有的房子並且使其相鄰的兩個房子顏色不能相同。當然,因為市場上不同顏色油漆的 不同,所以房子粉刷成不同顏色的花費成本也是不同的。每個房子粉刷成不同顏色的花費是以乙個 n x k 的矩陣來表示的。例如,costs...
DP LeetCode265 粉刷房子 II
同類題 leetcode256.粉刷房子 序列型 假如有一排房子,共 n 個,每個房子可以被粉刷成k 種顏色中的一種,你需要粉刷所有的房子並且使其相鄰的兩個房子顏色不能相同。當然,因為市場上不同顏色油漆的 不同,所以房子粉刷成不同顏色的花費成本也是不同的。每個房子粉刷成不同顏色的花費是以乙個 n x...
Leetcode 265 粉刷房子2
hard難度,思路和256幾乎完全相同,先初始化第一排然後用動態轉移方程,但是難點在於題目中要求time complexity為o k n 如果用for迴圈來尋找前一排的最小值花費過大,我使用的是arrays.sort 時間複雜度為o logn 找到最小值以後和當前值的上一排做對比,來確定上一排的最...