asp.net頁面傳值的幾種方式
阿新 • • 發佈:2021-11-18
暴力解法(超時)
import java.util.Arrays; class Solution { public int maxArea(int[] height) { /** * 暴力解法,直接使用額外陣列存放每一個座標為左邊界時的最大面積,最後對陣列求最大值 */ int[] res = new int[height.length]; for (int i = 0; i < height.length; i++) { int max = 0; for (int j = i + 1; j < height.length; j++) { int area = Math.min(height[i], height[j]) * (j - i); if (area > max){ max = area; } } res[i] = max; } return Arrays.stream(res).max().getAsInt(); } } /** * 時間複雜度 O(n^2) * 空間複雜度 O(n) */
優化1——雙指標法
class Solution { public int maxArea(int[] height) { /** * 雙指標法遍歷 * 如果往左或者往右的面積都小於當前的面積,則先記錄下當前面積,其不一定是最大面積 * 然後讓邊界值小的那個邊界移動 */ int left = 0; int right = height.length - 1; int area = 0; int max = 0; while (left < right){ area = Math.min(height[left], height[right]) * (right - left); if (Math.min(height[left + 1], height[right]) * (right - left - 1) > area){ left++; } else if (Math.min(height[left], height[right - 1]) * (right - left - 1) > area){ right--; } else { if (area > max) { max = area; } if (height[left] <= height[right]){ left++; } else { right--; } } } return max; } } /** * 時間複雜度 O(n) * 空間複雜度 O(1) */
優化2——簡化邊界移動的判斷條件
class Solution { public int maxArea(int[] height) { /** * 雙指標法遍歷 * 每次讓邊界值小的那個邊界移動,實時更新當前最大的面積 */ int left = 0; int right = height.length - 1; int area = 0; int max = 0; while (left < right){ area = Math.min(height[left], height[right]) * (right - left); max = Math.max(area, max); if (height[left] < height[right]){ left++; } else { right--; } } return max; } } /** * 時間複雜度 O(n) * 空間複雜度 O(1) */