ARTS 打卡第二周
1、Algorithm
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
设两个栈,s2 存放奇数层,s1 存放偶数层
遍历 s2 节点的同时按照左子树、右子树的顺序加入 s1,
遍历 s1 节点的同时按照右子树、左子树的顺序加入 s2
import java.util.ArrayList;
import java.util.Stack;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> > res = new ArrayList<ArrayList<Integer> >();
Stack<TreeNode> s1 = new Stack<TreeNode>();
Stack<TreeNode> s2 = new Stack<TreeNode>();
int flag = 1;
if(pRoot == null)
return res;
s2.push(pRoot);
ArrayList<Integer> temp = new ArrayList<Integer>();
while(!s1.isEmpty() || !s2.isEmpty()){
if(flag % 2 != 0){
while(!s2.isEmpty()){
TreeNode node = s2.pop();
temp.add(node.val);
if(node.left != null){
s1.push(node.left);
}
if(node.right != null){
s1.push(node.right);
}
}
}
if(flag % 2 == 0){
while(!s1.isEmpty()){
TreeNode node = s1.pop();
temp.add(node.val);
if(node.right != null){
s2.push(node.right);
}
if(node.left != null){
s2.push(node.left);
}
}
}
res.add(new ArrayList<Integer>(temp));
temp.clear();
flag ++;
}
return res;
}
}
2、Review
How Gerrit Works
http://gerrit.qisi.ltd/Documentation/intro-how-gerrit-works.html
参考:https://blog.csdn.net/qq_36413391/article/details/110139450
代码审查可以在代码上库前避免很多问题,或是一些低级问题或是设计上的问题,我们熟知的开源项目 git,linux 都在坚持代码审查,源代码不能私自修改提交项目代码,而是需要将 patch 邮件发送给对应的负责人,负责人审查通过后才会合并,而 Gerrit 是一款基于 web 界面用于代码审查的工具。一款好的工具首先是能够提供完整功能,更重要是围绕这个功能提供一套方便快捷,效率高的使用方式。Gerrit 就是这样一款好的工具,它提供了代码审查的功能,同时又方便于开发人员,审查人员和项目管理者的合作。
Gerrit 部署在代码服务器上,开发者在 push 修改时,得是先将代码 push 到 gerrit,由审批者审批过后才能真正入库,若是审批不通过则在该修改上评论,便于开发者纠正,修订后重新 push 直至审批通过。
一个不包 Gerrit 的代码服务器,开发者和持续集成都是直接从代码服务器拉取或推送代码,意味着开发者可以直接修改服务器上的代码,不利于实现代码审查。
一个包含 Gerrit 的代码服务器,开发者和持续集成还都是直接从代码服务器拉取代码,开发者做的修改都会先提交到待定区(pending changes),供审批人审批评论,当审批者审批通过后,方可提交至中央代码服务器。
3、Tips
Github 有时会进入 vim 编辑状态,比如 git commit -amend 命令。不知道还有几个开发不熟悉 vim 操作:
Mac 中 vim 的 进入编辑状态、退出编辑状态、强制保存并退出
(注意在英文输入法下进行)
举例说明:终端输入: vim ~/.bash_profile
键盘输入【i】进入编辑状态,开始并完成内容修改
点击【esc】退出编辑状态,此时无法对内容进行修改
键盘输入【:wq!】强制保存并退出 vim,回到终端的界面
终端输入:source ~/.bash_profile 让这个配置文件在修改后立即生效。
4、Share
程序员如何在工作之余进行学习?六大可落地执行方法
https://baijiahao.baidu.com/s?id=1724451231361568390&wfr=spider&for=pc
提到了:
对于程序员来说,在日常工作上学习是最好的学习方式。
代码评审可以看到高手写的更好的代码,可以帮新手提高的同时也增加自己阅历。有两个关键,第一就是代码编写标准,第二就是代码质量。还能培养我们的判断力,判断力对于技术岗位管理层是必要的能力。
设计文档,有了文档就可以很方便的写出接口文档和测试用例,可以快速梳理出来关键流程。
有效学习的 6 个步骤
1、自己设定目标,一定要具体可执行的。
2、根据目标分解任务,最好拉出时间进度。
3、学会利用工具,一定要成体系,随用随取;
4、记录每一项的学习进度,了解自己的时间分配。
5、找到可利用的资源,善用资源。
6、定期总结。
关于学什么,对于前端技能模型:由上到下:领域知识,前端知识,编程能力|架构能力|工程能力。
最底层的往往是基础知识,所以根据上述目标参考 6 种学习方法制定自己的学习计划。
版权声明: 本文为 InfoQ 作者【犇犇】的原创文章。
原文链接:【http://xie.infoq.cn/article/168fa016ecf2dcd3d10c3daab】。
本文遵守【CC BY-NC-SA】协议,转载请保留原文出处及本版权声明。
评论