(LeetCode 陣列 難度中等 1488題

2021-10-07 16:07:15 字數 2010 閱讀 6848

你的國家有無數個湖泊,所有湖泊一開始都是空的。當第 n 個湖泊下雨的時候,如果第 n 個湖泊是空的,那麼它就會裝滿水,否則這個湖泊會發生洪水。你的目標是避免任意乙個湖泊發生洪水。

給你乙個整數陣列 rains ,其中:

rains[i] > 0 表示第 i 天時,第 rains[i] 個湖泊會下雨。

rains[i] == 0 表示第 i 天沒有湖泊會下雨,你可以選擇 乙個 湖泊並 抽乾 這個湖泊的水。

請返回乙個陣列 ans ,滿足:

ans.length == rains.length

如果 rains[i] > 0 ,那麼ans[i] == -1 。

如果 rains[i] == 0 ,ans[i] 是你第 i 天選擇抽乾的湖泊。

如果有多種可行解,請返回它們中的 任意乙個 。如果沒辦法阻止洪水,請返回乙個 空的陣列 。

請注意,如果你選擇抽乾乙個裝滿水的湖泊,它會變成乙個空的湖泊。但如果你選擇抽乾乙個空的湖泊,那麼將無事發生(詳情請看示例 4)。

示例 1:

輸入:rains = [1,2,3,4]

輸出:[-1,-1,-1,-1]

解釋:第一天後,裝滿水的湖泊包括 [1]

第二天後,裝滿水的湖泊包括 [1,2]

第三天後,裝滿水的湖泊包括 [1,2,3]

第四天後,裝滿水的湖泊包括 [1,2,3,4]

沒有哪一天你可以抽乾任何湖泊的水,也沒有湖泊會發生洪水。

示例 2:

輸入:rains = [1,2,0,0,2,1]

輸出:[-1,-1,2,1,-1,-1]

解釋:第一天後,裝滿水的湖泊包括 [1]

第二天後,裝滿水的湖泊包括 [1,2]

第三天後,我們抽乾湖泊 2 。所以剩下裝滿水的湖泊包括 [1]

第四天後,我們抽乾湖泊 1 。所以暫時沒有裝滿水的湖泊了。

第五天後,裝滿水的湖泊包括 [2]。

第六天後,裝滿水的湖泊包括 [1,2]。

可以看出,這個方案下不會有洪水發生。同時, [-1,-1,1,2,-1,-1] 也是另乙個可行的沒有洪水的方案。

示例 3:

輸入:rains = [1,2,0,1,2]

輸出:解釋:第二天後,裝滿水的湖泊包括 [1,2]。我們可以在第三天抽乾乙個湖泊的水。

但第三天後,湖泊 1 和 2 都會再次下雨,所以不管我們第三天抽乾哪個湖泊的水,另乙個湖泊都會發生洪水。

示例 4:

輸入:rains = [69,0,0,0,69]

輸出:[-1,69,1,1,-1]

解釋:任何形如 [-1,69,x,y,-1], [-1,x,69,y,-1] 或者 [-1,x,y,69,-1] 都是可行的解,其中 1 <= x,y <= 10^9

示例 5:

輸入:rains = [10,20,20]

輸出:解釋:由於湖泊 20 會連續下 2 天的雨,所以沒有沒有辦法阻止洪水。

思路:如果某個湖泊在時間t1到t2期間出現了第二次下雨,則需要在這個時間段找出離第一次下雨t1最接近的天晴的日子,進行抽水。否則就會洪水氾濫。

陣列中:

0:天晴

其他數字:表示第幾號湖泊會下雨

下標:表示日期

這裡按日期([0] - [5] )進行演示:

**如下:

class solution 

if(water.count(rains[i])) //湖泊下過雨

;//同一湖泊兩個時間段內沒有晴天存在,則無法在下一次湖水來臨前抽乾湖水,湖水來臨後就會洪水氾濫

ans[*it] = rains[i];

sun_0.erase(it);

}water[rains[i]] = i; // 儲存下雨日期i

ans[i] = -1; // 下雨則為 -1

}return ans;}};

二 leetcode 中等難度 1

leetcode中等難度貼,每個帖子5題。2.鍊錶加法 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會...

中等難度 1

第2題 在leetcode題號為2 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。definition for singly linked lis...

leetcode 兩數相加 中等難度

題目如下 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807 直接能夠想到的就是把鍊錶中的陣列組...