九章演算法 LinkedIn面試題 房屋染色

2021-10-25 01:36:56 字數 1186 閱讀 6152

這裡有​n​個房子在一列直線上,現在我們需要給房屋染色,分別有紅色藍色和綠色。每個房屋染不同的顏色費用也不同,你需要設計一種染色方案使得相鄰的房屋顏色不同,並且費用最小,返回最小的費用。

費用通過乙個​n​x​3​ 的矩陣給出,比如​cost[0][0]​表示房屋​0​染紅色的費用,​cost[1][2]​表示房屋​1​染綠色的費用。

樣例 1:

輸入: [[14,2,11],[11,14,5],[14,3,10]]

輸出: 10

解釋: 第乙個屋子染藍色,第二個染綠色,第三個染藍色,最小花費:2 + 5 + 3 = 10.

樣例 2:

輸入: [[1,2,3],[1,4,6]]

輸出: 3

演算法:動態規劃(dp)

演算法思路

**思路

初始化狀態​dp[0][i]=costs[0][i]​

從左往右遍歷每一幢房子,計算到該幢房子塗每種顏色的最小花費,狀態轉移方程是​dp[i][j] = min (k != j)​

答案為到最後一幢房子塗每種顏色花費中的最小值,即​min(dp[n-1][k]),k=0,1,2​

複雜度分析

n表示房子的幢數,即costs陣列長度

優化

**

public

class

solution

//dp[i][j]表示第i幢房子塗j的顏色最小的總和

//初始化狀態dp[0][i]=costs[0][i]int

dp=newint[2

][3];for

(inti=

0;i<3;

i++)

for(

inti=1

;ii++)}}

}return

math

.min(dp

[n&1

^1][0

],math

.min(dp

[n&1

^1][1

],dp[n

&1^1

][2]));

}}

更多題解參考:九章演算法

九章演算法 Google面試題 內積

描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...

九章演算法面試題32 小球排序

有紅黃藍三色的小球若干排成一列,這些小球進行排序,請使用盡量少的空間和時間。假設順序為紅色黃色藍色。用兩根指標從頭開始遍歷,第一根指標遇到非紅色時停下,如果第二根指標找到第一根指標之後的第乙個紅色停下,交換兩根指標所指顏色。重複上述過程。直到第二根指標找不到任何紅色。此時第一根指標到最後都是黃色或藍...

九章演算法面試題33 陣列波峰

乙個陣列a 1.n 假設陣列中沒有任何相鄰兩數相等,滿足a 1 n。a i 被稱為波峰,當且僅當a i a i 1 並且a i a i 1 請找到陣列中的乙個波峰。假設陣列中存在相鄰相等的數,該怎麼做?根據條件a 1 a n 可知a中一定存在波峰。用二分法,選擇中點mid,如果a mid 是波峰,則...