所谓ARTS:每周至少做一个LeetCode的算法题;阅读并点评至少一篇英文技术文章;学习至少一个技术技巧;分享一篇有观点和思考的技术文章。(也就是Algorithm、Review、Tip、Share 简称ARTS)这是第十九期打卡。
在文章开头,想给自己前几天写的一篇文章打个推广,这篇文章是告诉我们如何更好地去做好一件事,那就是不停地给自己做减法减法减法,每次只做好一件事,那就是最重要的事。
该篇文章还上了CSDN的首页推广,给很多小伙伴产生了共鸣,所以也请没看过的读者可以移步去看下哦。《成就更好的自己,就是不停地做减法》
将有序数组转换为二叉搜索树 (https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/)
题目描述:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。
示例 1:
给定有序数组 [-10,-3,0,5,9]
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树
输入:
0
/ \
-3 9
/ /
-10 5
在介绍解法之前,首先我们先来了解下什么是二叉搜索树。
而且,题目中说明了,是一个升序数组,那么在二叉树中中序遍历输出的就是升序数组。
根据中序遍历加前序遍历或者中序遍历后序遍历来还原一棵树。前序(后序)遍历是为了提供根节点。然后我们根据根节点,就可以了递归的生成左右子树了。
因为是平衡二叉树,所以只要把根节点选为数组的中点就好了。找到根节点,然后把数组一分为二,进入递归,就迎刃而解啦。
public static void main(String[] args) {
int[] nums = {-10,-3,0,5,9};
TreeNode treeNode = sortedArrayToBST(nums);
System.out.println(treeNode);
}
public static TreeNode sortedArrayToBST(int[] nums) {
return sortedArrayToBST(nums,0,nums.length);
}
public static TreeNode sortedArrayToBST(int[] nums,int start,int end) {
System.out.println("start = " + start + " end = " + end);
if (start == end) {
return null;
}
int mid = (start + end) >>> 1;
System.out.println("mid = " + mid + " start = " + start + " end = " + end);
TreeNode root = new TreeNode(nums[mid]);
root.left = sortedArrayToBST(nums, start, mid);
System.out.println("start = " + start + " end ====================== " + end);
System.out.println("mid = " + mid + " end = " + end);
root.right = sortedArrayToBST(nums, mid + 1, end);
return root;
}
当然,这里还有多于一种的解决方案,还有通过栈、通过队列的方式来解决。小编也是参考了课后的优秀题解,所以推荐大家前往https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-24/这里查看。当然,阅读原文处已经把链接加上了,可以直接过去哦。
My first experience with Kotlin Native (https://link.juejin.im/?target=https%3A%2F%2Fmedium.com%2F%40champigny.florent%2Fmy-first-experience-with-kotlin-native-988e96f26657)
今天我们来了解下Kotlin,这是一位外国友人在Medium上发表的题为《My first experience with Kotlin Native》。
文章篇幅还是有点长的,让我看的很辛苦。我这个英语水平,真的是太累了,所以,英语学习很重要呢。
作者记录了自己如何成功创建第一个Android和iOS兼容模块,以及如何将其集成到实际应用程序中。
分别是:
这么多内容,看的我真的是,不过也从中学会了部分Kotlin和Native的关联,看完之后,还可以和之前的Java和Native的做下对比。
因为Kotlin作为谷歌力推的一个Android编写语言,势必会有一个更好的发展。
作者通过自己一步步的实践,来总结Kotlin-Native,是一个很好的学习方式,有条件的同学可以去看看他的具体过程,感受下这一份心路历程,在技术学习的道路上,走的更好。
在之前学习《Android开发高手课》的时候,还学会了一个如何实现高可用的上报组件,并做了部分总结。这里挑选出部分精华来分享。
究竟什么是“高可用”的上报组件?我认为至少需要达到三个目标:
采样还需要满足三个标准。
我们怎样确保上报组件的数据可靠性和实效性呢?答案依然是监控,我们需要建立一套完善的自监控体系,为后续进一步优化提供可靠的数据支撑。
设计模式走起来。
公众号地址: 设计模式之命令模式(二)