本篇博客讲解LeetCode热题100道双指针篇中的
第一道:移动零(简单)
第二道:盛最多水的容器(中等)
第一道:移动零(简单)
class Solution {public void moveZeroes(int[] nums) {for (int cur = 0,dest = -1; cur <nums.length ; cur++) {//采用双指针思想,将数组分为[0,dest]为非零,[dest+1,cur-1]全为零,[cur,0]待处理。if(nums[cur] != 0){dest++;int temp = nums[cur];nums[cur] = nums[dest];nums[dest] = temp;}}}
}
采用双指针思想,将数组分为[0,dest]为非零,[dest+1,cur-1]全为零,[cur,0]待处理。
如果当前的数非0,那么dest++。并交换cur与dest的值。
如果是零则跳过,不做任何操作。
第二道:盛最多水的容器(中等)
无注释版本
class Solution {public int maxArea(int[] height) {int left = 0,right = height.length-1; int temp = 0;int var = 0;while (left < right){temp = Math.min(height[left],height[right]) * (right-left);var = Math.max(temp,var);if(height[left] > height[right]){right--;}else {left++;}}return var;}
}
带注释版本
class Solution {public int maxArea(int[] height) {int left = 0,right = height.length-1; int ret = 0;while (left < right){/*** 暂时的容量*/int temp = Math.min(height[left],height[right]) * (right-left);/*** 更新容量,找到最大值*/ret = Math.max(temp,ret);/****/if(height[left] > height[right]){right--;}else {left++;}}return ret;}
}
1.定义双指针,找到暂时得到容量,并且记录最终容量ret为两者最大值
2.如果比较高度,谁低则那边减减。不断缩小区间。找到盛水最多的点。
3.返回ret