您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么用C#實現盛最多水的容器”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
難度:中等
給你 n 個非負整數 a1,a2,...,an,每個數代表坐標中的一個點 (i, ai) 。在坐標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。
說明:你不能傾斜容器,且 n 的值至少為 2。
圖中垂直線代表輸入數組 [1,8,6,2,5,4,8,3,7]。在此情況下,容器能夠容納水(表示為藍色部分)的最大值為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; }
第三種解法:雙指針優化(左指針小于等于最小高度,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; }
結果:
“怎么用C#實現盛最多水的容器”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。