专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

leetcode 接雨水、三数之和、盛水最多的容器

最近做刷leetcode 接雨水问题,看到一种比较容易理解,和比较容易写的方法,记录一下。 原文链接:
leetcode-cn.com/problems/tr…

class Solution {
    public int trap(int[] height) {
        int i = 0;
        int j = height.length-1;
        int sum = 0;
        int cur = 1;
        int total = 0;
        while(i <= j){   ## **//这里需要判断等于号!**
            while(i <= j && height[i] < cur){
                sum += height[i];
                i++;
            }
            while(i <= j && height[j] < cur){
                sum += height[j];
                j--;
            }
            cur++;
            total += j-i+1;
        }
        return total-sum;
    }
}

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution {
    List<List<Integer>> lists = new ArrayList<>();

    public List<List<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        for (int k = 0; k < nums.length - 2; k++) {
            if (nums[k] > 0)
                return lists;
            if (k > 0 && nums[k] == nums[k - 1])
                continue;
            int i = k + 1;
            int j = nums.length - 1;
            while (i < j) {
                int sum = nums[k] + nums[i] + nums[j];
                if (sum < 0) {
                    while (i < j && nums[i] == nums[i + 1])
                        i++;
                    i++;
                } else if (sum > 0) {
                    while (i < j && nums[j] == nums[j - 1])
                        j--;
                    j--;
                } else {
                    lists.add(new ArrayList<>(Arrays.asList(nums[k], nums[i], nums[j])));
                    while (i < j && nums[i] == nums[i + 1])
                        i++;
                    i++;
                    while (i < j && nums[j] == nums[j - 1])
                        j--;
                    j--;
                }

            }
        }
        return lists;
    }
}

11. 盛最多水的容器
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器,且 n 的值至少为 2。

class Solution {
    public int maxArea(int[] height) {
        int i = 0;
        int j = height.length - 1;
        int area = 0;
        int res = 0;
        while (i < j) {
            area = Math.min(height[i], height[j]) * (j - i);
            if (height[i] < height[j]) {
                i++;
            } else {
                j--;
            }
            res = Math.max(res, area);
        }
        return res;
    }
}

文章永久链接:https://tech.souyunku.com/27983

未经允许不得转载:搜云库技术团队 » leetcode 接雨水、三数之和、盛水最多的容器

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们