您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“怎么用C#實(shí)現(xiàn)盛最多水的容器”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
難度:中等
給你 n 個(gè)非負(fù)整數(shù) a1,a2,...,an,每個(gè)數(shù)代表坐標(biāo)中的一個(gè)點(diǎn) (i, ai) 。在坐標(biāo)內(nèi)畫 n 條垂直線,垂直線 i 的兩個(gè)端點(diǎn)分別為 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構(gòu)成的容器可以容納最多的水。
說明:你不能傾斜容器,且 n 的值至少為 2。
圖中垂直線代表輸入數(shù)組 [1,8,6,2,5,4,8,3,7]。在此情況下,容器能夠容納水(表示為藍(lán)色部分)的最大值為49。
示例:
輸入:[1,8,6,2,5,4,8,3,7]
輸出:49
題解:
第一種解法:暴力
public int MaxArea(int[] height) { // 解法1: int res = 0; for (int i = 0; i < height.Length; i++) { for (int j = i + 1; j < height.Length; j++) { int thisArea = (j - i) * Math.Min(height[i], height[j]); res = Math.Max(res, thisArea); } } return res; }
第二種解法:雙指針(左指針大于右指針,left++)
public int MaxArea(int[] height) { int res = 0; int left = 0; int right = height.Length - 1; while (left < right) { int thisArea = (right - left) * Math.Min(height[left], height[right]); res = Math.Max(res, thisArea); if (height[left] > height[right]) right--; else left++; } return res; }
第三種解法:雙指針優(yōu)化(左指針小于等于最小高度,left++)
public int MaxArea(int[] height) { int res = 0; int left = 0; int right = height.Length - 1; while (left < right) { int minHeight = Math.Min(height[left], height[right]); int thisArea = (right - left) * minHeight; res = Math.Max(res, thisArea); if (left < right && height[left] <= minHeight) left++; if (left < right && height[right] <= minHeight) right--; } return res; }
結(jié)果:
“怎么用C#實(shí)現(xiàn)盛最多水的容器”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。