LeetCodeHot100 283. 移動零 11. 盛最多水的容器 42. 接雨水 15. 三數之和

jeasonGo發表於2024-03-09

283. 移動零
https://leetcode.cn/problems/move-zeroes/description/?envType=study-plan-v2&envId=top-100-liked

public void moveZeroes(int[] nums) {
        int r = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0){
                int temp = nums[r];
                nums[r] = nums[i];
                nums[i] = temp;
                r++;
            }
        }
    }

總結:一個指標去記錄放非0的位置,一個指標去遍歷
11. 盛最多水的容器
https://leetcode.cn/problems/container-with-most-water/description/?envType=study-plan-v2&envId=top-100-liked

public int maxArea(int[] height) {
        int i = 0 , j = height.length - 1;
        int maxRain = 0;
        while (i < j){
            maxRain = height[i] < height[j] ? 
                    Math.max(maxRain , getRain(height ,i++,j)) :
                    Math.max(maxRain , getRain(height,i,j--));
        }
        return maxRain;
    }
    public int getRain(int[] height, int i,int j){
        return (j - i) * Math.min(height[i],height[j]);
    }

總結:使用雙指標,總體思想就是先讓指標在左右邊界,然後每次指標往裡收縮,收縮哪個呢,收縮二者矮的那個,因為收縮矮的,下個面積可能變大,如果收縮高的,下個面積不變(收縮了之後高度一樣)或變小(收縮之後高度變小)(ps:如果收縮之後高度變大了,由於有之前的短板的存在,所以木桶效應,還是面積會變小)
42. 接雨水

相關文章