LeetCode 755. 倒水(模拟)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 755. 倒水(模拟)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給出一個(gè)地形高度圖, heights[i] 表示該索引處的高度。
每個(gè)索引的寬度為 1。在 V 個(gè)單位的水落在索引 K 處以后,每個(gè)索引位置有多少水?
水最先會(huì)在索引 K 處下降并且落在該索引位置的最高地形或水面之上。然后按如下方式流動(dòng):
- 如果液滴最終可以通過向左流動(dòng)而下降,則向左流動(dòng)。
- 否則,如果液滴最終可以通過向右流動(dòng)而下降,則向右流動(dòng)。
- 否則,在當(dāng)前的位置上升。
- 這里,“最終下降” 的意思是液滴如果按此方向移動(dòng)的話,最終可以下降到一個(gè)較低的水平。而且,“水平”的意思是當(dāng)前列的地形的高度加上水的高度。
我們可以假定在數(shù)組兩側(cè)的邊界外有無限高的地形。而且,不能有部分水在多于 1 個(gè)的網(wǎng)格塊上均勻分布 - 每個(gè)單位的水必須要位于一個(gè)塊中。
示例 1: 輸入:heights = [2,1,1,2,1,2,2], V = 4, K = 3 輸出:[2,2,2,3,2,2,2] 解釋: # # # # ## # ### #########0123456 <- 索引第一個(gè)水滴降落在索引 K = 3 上:# # # w # ## # ### #########0123456 當(dāng)向左或向右移動(dòng)時(shí),水可以移動(dòng)到相同或更低的高度。When moving left or right, the water can only move to the same level or a lower level. (從水平上看,意思是該列的地形高度加上水的高度) 由于向左移動(dòng)可以最終下落,因此向左移動(dòng)。 (一個(gè)水滴 “下落” 的意思是可以相比之前可以進(jìn)入更低的高度)# # # # ## w# ### #########0123456 由于向左移動(dòng)不會(huì)使其降落,所以停在該位置上。下一個(gè)水滴下落:# # # w # ## w# ### #########0123456 由于新水滴向左移動(dòng)可以最終下落,因此向左移動(dòng)。 注意水滴仍然是優(yōu)先選擇向左移動(dòng), 盡管可以向右移動(dòng)(而且向右移動(dòng)可以下落更快)# # # w # ## w# ### #########0123456 # # # # ##ww# ### #########0123456 經(jīng)過剛才的階段后,第三個(gè)水滴下落。 由于向左移動(dòng)不會(huì)最終下落,因此嘗試向右移動(dòng)。 由于向右移動(dòng)可以最終下落,因此向右移動(dòng)。# # # w # ##ww# ### #########0123456 # # # # ##ww#w### #########0123456 最終,第四個(gè)水滴下落。 由于向左移動(dòng)不會(huì)最終下落,因此嘗試向右移動(dòng)。 由于向右移動(dòng)不會(huì)最終下落,因此停在當(dāng)前位置:# # # w # ##ww#w### #########0123456 最終的答案為 [2,2,2,3,2,2,2]:# ####### ####### 0123456 示例 2: 輸入:heights = [1,2,3,4], V = 2, K = 2 輸出:[2,3,3,4] 解釋: 最后的水滴落在索引 1 位置,因?yàn)槔^續(xù)向左移動(dòng)不會(huì)使其下降到更低的高度。示例 3: 輸入:heights = [3,1,3], V = 5, K = 1 輸出:[4,4,4]注: heights 的長(zhǎng)度為 [1, 100] ,并且每個(gè)數(shù)的范圍為[0, 99]。 V 的范圍 [0, 2000]。 K 的范圍 [0, heights.length - 1]。來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/pour-water
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
class Solution { public:vector<int> pourWater(vector<int>& heights, int V, int K) {int l = K, r = K, n = heights.size();while(V)//還有水{l = K;while(l >= 1 && heights[l-1] <= heights[l])//左邊有更低的l--;while(l < K && heights[l] == heights[l+1])//一樣高,靠近k處l++;if(l != K){heights[l]++;V--;continue;}r = K;while(r <= n-2 && heights[r] >= heights[r+1])//右邊有更低的r++;while(r > K && heights[r-1] == heights[r])r--;heights[r]++;//r==K的情況合并了V--;}return heights;} };4 ms 7.2 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 755. 倒水(模拟)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1653. 使字符串平
- 下一篇: LeetCode 1569. 将子数组重