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. 接雨水