1.Algorithm:https://leetcode-cn.com/problems/container-with-most-water/

盛水最多的容器

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

可以暴力遍历,比较巧的方法是利用双指针,一个指向数组开头,一个指向数组的尾端。开始计算盛水量,比较这两个位置的数值大小,哪个方向的数值小,则向中间移动一步,知道两个指针相遇。

参考代码如下:

//leetcode 11
public class MostWater {
    public int maxArea(int[] height) {
        int res = 0;
        if (height == null || height.length == 0) {
            return 0;
        }
        for (int i = 0; i < height.length; ++i) {
            for (int j = i + 1; j < height.length; ++j) {
                int area = Math.min(height[i], height[j]) * (j - i);
                res = Math.max(res, area);
            }
        }
        return res;
    }

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

2.Review:https://shipilev.net/jvm/anatomy-quarks/8-local-var-reachability/

本地变量的可访问性

在C++里,本地变量在它的句法作用域里是一直有效的。在java中是这样的吗?

离开了当前作用域,存储在局部变量中的引用才会被回收,这种说法正确吗?在Java中并非如此,Java局部变量的可用性不由代码块决定,而与最后一次使用有关,并且可能会持续到最后一次使用为止。使用像finalizer、强引用、弱引用、虚引用这样的方法通知对象不可达,会受到“提前检查”优化带来的影响,使得代码块还没有结束变量可能已不可用,这是一种很好的特性,使得GC能提前回收掉本地分配的大量缓存

当然如果想获得C++编程那种代码块结束时才释放的特性,你可以使用try-finally

3.Tip:继续学习相关linux编程的知识。

4.share: https://mp.weixin.qq.com/s/mobYyu69oLUTvkRNPbPD1A

专栏 数据结构与算法之美的作者王争的文章,挺喜欢其中的话,

成年人的突然优秀,都是深谋远虑之后的正常发挥