本篇博客讲解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