第48周 ARTS 2019 09 15

Algorithm:257 二叉树的所有路径
Review: G1垃圾收集器入门
Tip/Tech:三路快排
Share:剑桥博士:为何中国肯下血本在西方不做的亏本买卖上

Algorithm

257 二叉树的所有路径

https://leetcode-cn.com/problems/binary-tree-paths/
在这里插入图片描述
这题其实就是中序遍历的思想而已,因为这里用的是这里的顺序是总是先输出根节点再输出叶子节点,所以,只要只要能够想到中序的递归遍历,这题就可以很好的解决。
用一个list来保存走过的节点,并且判断每个节点是否是叶子节点(也就是它的左右节点皆为空),是叶子就保存到list中。然后最后要把当前节点从这里删除哦。。
Show The Code.

class Solution {
    List<String> res = new ArrayList<>();
    public List<String> binaryTreePaths(TreeNode root) {
        LinkedList<Integer> list = new LinkedList<>();
        preTraverse(root,  list);
        return res;
    }

    public void preTraverse(TreeNode node, LinkedList<Integer> list) {
        if (node == null) {
            return;
        }
        list.add(node.val);
        if (node.left == null && node.right == null) {
            res.add(buildString(list));
        }
        preTraverse(node.left, list);
        preTraverse(node.right, list);
        list.removeLast();
    }
// 一个用来构造字符串的方法。
    public String buildString(List<Integer> list) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0, len = list.size(); i < len; ++i) {
            if (i == len - 1) {
                sb.append(list.get(i));
            } else {
                sb.append(list.get(i) + "->");
            }
        }
        return sb.toString();
    }
}

在这里插入图片描述
在这里插入图片描述

Review

Getting Started with the G1 Garbage Collector

G1垃圾收集器入门

https://www.oracle.com/technetwork/tutorials/tutorials-1876574.html#overview
首先是架构垃圾回收器的架构的不同,一下是CMS的简单架构图:
在这里插入图片描述
分成年轻代,老年代,和永久代。
以下是G1垃圾回收器的架构图:
在这里插入图片描述
这里的内存空间被切成了各种不同的小块,每块的定位不同(eden,survivor,old),注意,这里没有了永久代的概念了。

接下来是垃圾回收的过程,G1的垃圾回收比起之前的垃圾回收,优点是减少了停顿的时间,而且有个暂停时间模型。比起原来的CMS垃圾回收器有了不少的提升。
具体的那些我觉得真的值得单独拎出来写一篇的。不过我觉得全篇最重要的还是下面这句:
注意: 如果你正在使用CMS或者ParallelOldGC并且你的应用并没有受长时间的垃圾收集暂停时间之苦,那么最好还是保持使用你当前的垃圾收集器。对于使用最新的JDK而言,切换到G1并不是必须的。

Tip/Tech

三路快排:

public void quickSort(int[] arr) {
	quickSort(arr, 0, arr.length - 1);
}

public void quickSort(int[] arr, int startIndex, int endIndex) { 
	if (startIndex >= endIndex) {
		return;
	}
	int pivotIndex = partitionByThree(arr, startIndex, endIndex);
	quickSort(arr, startIndex, pivotIndex);
	quickSort(arr, pivotIndex + 1, endIndex);
}

private int partitionByThree(int[] arr, int startIndex, int endIndex) {
	int pivotValue = arr[startIndex];
	int low = startIndex; // 1路
	int high = endIndex; // 2路
	int index = startIndex + 1; // 3路
	// 
	while (index <= high) {
		if (arr[index] < pivotValue) {
			low++;
			swap(arr, index, low);
			index++;
		} else if (arr[index] == pivotValue) {
			index++;
		} else if (arr[index] > pivotValue) {
			swap(arr, index, high);
			high--;
		}
	}
	swap(arr, startIndex, low);
	return low;
}

这是快排的另一种实现,其实快排的实现不同主要体现在partition函数的实现的思想上的变化,别的倒没什么。虽然我觉得比起双轴快排,三路快排好像快不了多少。

Share

剑桥博士:为何中国肯下血本在西方不做的亏本买卖上

https://finance.sina.cn/china/gncj/2019-05-31/detail-ihvhiqay2662671.d.html
不得不说,挺惭愧的,这位博士真的挺喜欢研究中国的,而且,比我这个中国人更加的了解中国。
这个背景是说为啥会去投资国外(比如非洲)第三世界,为啥不把钱花在投资国内的贫困地区的建设上。
这个博士用翔实的数据,以及各种图片,向整个网站说明了,我们其实一直在努力地去改变各种贫困地区的经济。如果是西方,可能觉得收不回成本,就算了,但是因为我们的“特色社会主义”,所以,我们依然回去选择去做。这就是我们的国家,这就是我们的社会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值