???个人主页: 才疏学浅的木子 ??♂? 本人也在学习阶段如若发现问题,请告知非常感谢 ??♂? ? 本文来自专栏: 算法 ? 算法类型:Hot100题 ? ?? 支持我:?点赞 ?收藏 ?关注
解法一
双指针 left指向左边,right指向右边 如果num[left] <= num[right] 那么left++反之righht– 因为盛水靠矮的一方
class Solution {
public int maxArea(int[] height) {
int len = height.length;
if(len <= 1) return 0;
int left = 0;
int right = len-1;
int res = 0;
while(left < right){
res = Math.max(res,Math.min(height[left],height[right])*(right-left));
if(height[left] <= height[right]) left++;
else if(height[left] > height[right]) right--;
}
return res;
}
}
解法一
双指针 先进行排序,然后遍历当前num[i] + num[left] +num[right] 与 0 的大小 如果大于0所以right–; 如果小于0所以left++
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
int len = nums.length;
List<List<Integer>> list = new ArrayList<>();
if(len < 3) return list;
Arrays.sort(nums);
for(int i = 0;i < len;i++){
if(i > 0 && nums[i-1] == nums[i]) continue;
int left = i + 1;
int right = len-1;
while(left < right){
if(nums[i] + nums[left] + nums[right] == 0){
// System.out.println(i+"=="+left+"=="+right);
List<Integer> t = new ArrayList<>();
t.add(nums[i]);
t.add(nums[left]);
t.add(nums[right]);
list.add(t);
while(left < right && nums[left+1] == nums[left]) left++;
while(left < right && nums[right-1] == nums[right]) right--;
left++;
right--;
}else if(nums[i] + nums[left] + nums[right] > 0){
right--;
}else left ++;
}
}
return list;
}
}
class Solution {
public void moveZeroes(int[] nums) {
int len = nums.length;
if(len == 0) return;
int right = 0;
for(int i = 0;i < len;i++){
if(nums[i] != 0){
nums[right++] = nums[i];
}
}
for(int i = right;i < len;i++){
nums[i] = 0;
}
return;
}
}