困難 澆灌花園的最少水龍頭數目

2021-10-07 21:57:25 字數 1534 閱讀 8348

在 x 軸上有乙個一維的花園。花園長度為 n,從點 0 開始,到點 n 結束。

花園裡總共有 n + 1 個水龍頭,分別位於 [0, 1, …, n] 。

給你乙個整數 n 和乙個長度為 n + 1 的整數陣列 ranges ,其中 ranges[i] (下標從 0 開始)表示:如果開啟點 i 處的水龍頭,可以灌溉的區域為 [i - ranges[i], i + ranges[i]] 。

請你返回可以灌溉整個花園的 最少水龍頭數目 。如果花園始終存在無法灌溉到的地方,請你返回 -1 。

(1)貪心演算法解題思路:

/**

* @author chengqian

* @create 2020-07-07 20:59

* tag-貪心演算法 , leetcode-1326-困難

*/public

static

intmintaps

(int n,

int[

] ranges)

int breakpoint = n, furthest = integer.max_value;

int ans =0;

for(

int i = n; i >

0; i--

) breakpoint = furthest;

ans++;}

}return ans;

}

(2)動態規劃解題思路

/**

* @author chengqian

* @create 2020-07-07 20:59

* tag-動態規劃 , leetcode-1326-困難

*/public

intmintaps

(int n,

int[

] ranges)

int[

] dp =

newint

[n+1];

arrays.

fill

(dp, integer.max_value)

;//dp[i]表示覆蓋花園子區間[0,i],至少選取的區間數目。

dp[0]

=0;for

(int i =

1; i <= n; i++)}

}return dp[n]

== integer.max_value ?-1

: dp[n]

;}

相比較這兩種演算法,雖然貪心演算法和動態規劃可以相互轉換,不難發現貪心演算法效果要優於動態規劃,貪心演算法的時間複雜度為o(n),只遍歷了一次陣列,而動態規劃時間複雜度為o(nr),其中r為陣列ranges中的最大值。

雖然貪心演算法和動態規劃可以相互轉換,不難發現貪心演算法效果要優於動態規劃,貪心演算法的時間複雜度為o(n),只遍歷了一次陣列,而動態規劃時間複雜度為o(nr),其中r為陣列ranges中的最大值。

教主的花園

lhx教主最近總困擾於前來膜拜他的人太多了,所以他給他的花園加上了一道屏障。可以把教主的花園附近區域抽像成乙個正方形網格組成的網路,每個網格都對應了乙個座標 均為整數,有可能為負 若兩個網格 x1,y1 x2,y2 有 x1 x2 y1 y2 1,則說這兩個網格是相鄰的,否則不是相鄰的。教主在y 0...

教主的花園

教主有著乙個環形的花園,他想在花園周圍均勻地種上n棵樹,但是教主花園的土壤很特別,每個位置適合種的樹都不一樣,一些樹可能會因為不適合這個位置的土壤而損失觀賞價值。教主最喜歡33種樹,這3種樹的高度分別為10,20,3010,20,30。教主希望這一圈樹種得有層次感,所以任何乙個位置的樹要比它相鄰的兩...

松雅的花園

問題描述 冬天到了,松雅覺得是時候給她的花園澆水了。她的花園由 n 個連續的苗圃組成,編號從 1 n。其中的 k 個苗圃安裝有水龍頭 第 i 個水龍頭位於苗圃 xi 當水龍頭開啟的時候,可以同時給相鄰的苗圃澆水。1個時間單位後,她可以給苗圃 xi 澆好水,2個時間單位後,她可以給 xi 1,xi 1...