題目連結(jié):
題目意譯:
你被給定一個索引值從 0 開始且長度為 n 的整數(shù)陣列 forts,其代表著數(shù)個碉堡的位置。forts[i] 之值可以是 -1 、 0 或是 1,其中:
-1 代表著在位置 i 沒有碉堡存在;
0 代表著在位置 i 有一個敵人的碉堡存在;
1 代表著在位置 i 有一個由你指揮的碉堡存在。
現(xiàn)在你想要從一個位於位置 i 的碉堡移動你的軍隊到一個空位置 j 使得:
0 ≦ i, j ≦ n - 1
該軍隊只會經(jīng)過敵人的碉堡。更正式地說,對於所有 k 值,其中 min(i,j) < k < max(i,j),都滿足 forts[k] == 0。
在該軍隊移動時,所以路程上的敵人碉堡都將會被我方佔領(lǐng)。
回傳可以被佔領(lǐng)的敵人碉堡之最大數(shù)量。如果你沒有任何方式可以移動軍隊,又或是你沒有任何可指揮的碉堡存在,則回傳 0。
限制:
1 ≦ forts.length ≦ 1000
-1 ≦ forts[i] ≦ 1
範(fàn)例測資:
範(fàn)例 1:
輸入: forts = [1,0,0,-1,0,0,0,0,1]
輸出: 4
解釋:
- 將位置 0 的軍隊移動到位置 3 並佔領(lǐng) 2 座敵人碉堡,其位於 1 和 2。
- 將位置 8 的軍隊移動到位置 3 並佔領(lǐng) 4 座敵人碉堡。
由於 4 是我們最大可以佔領(lǐng)敵人碉堡數(shù),因此我們回傳 4。
範(fàn)例 2:
輸入: forts = [0,0,1,-1]
輸出: 0
解釋: 由於沒有敵人碉堡可以佔領(lǐng),因此回傳 0。
解題思維:
由於軍隊只能從我方碉堡(也就是某個 1 的格子)移動到空位(也就是某個 -1 的格子),而這之間間隔的格子全數(shù)都得是 0。
因此我們可以掃過一次 forts 並記錄每一組相鄰(忽略所有 0 之後的樣子)的 1 和 -1 之?dāng)?shù)對(記得 1 配 1 或是 -1 配 -1 是不行的)並計算它們之間的索引值差即可得到這一對可以佔領(lǐng)的敵人碉堡數(shù)。取其中的最大值即為所求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。