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