265 粉刷房子 II

2021-09-29 09:29:08 字數 801 閱讀 1290

首先這題可以和粉刷房子這題一樣解法,對於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 找到最小值以後和當前值的上一排做對比,來確定上一排的最...