1. 程式人生 > 其它 >asp.net頁面傳值的幾種方式

asp.net頁面傳值的幾種方式

暴力解法(超時)

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)
 */

https://leetcode-cn.com/problems/container-with-most-water/