欢迎来到英杰社区:
https://bbs.csdn.net/topics/617804998
欢迎来到阿Q社区:
https://bbs.csdn.net/topics/617897397
📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。
📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看
📘相关专栏C语言初阶、C语言进阶系列、恒川等,大家有兴趣的可以看一看
📙Python零基础入门系列,Java入门篇系列、docker技术篇系列、Apollo的学习录系列正在发展中,喜欢Python、Java、docker的朋友们可以关注一下哦!
回顾 2023 恒川的编程之旅
知识改变命运,学习成就未来。时序更替,岁物丰成。回望来时路,我们已走过千山万水;展望新征程,曙光跃动在地平线上。在成长的道路上,不断充实自己,才能走得更远。大家好,我是恒川,目前是一名大二的学生,来csdn已经一年了,这篇博客不谈技术,回顾恒川 2023年 的编程之旅。
一、这一年的日常内容
1. 每天坚持做一道力扣
每天坚持做一道力扣题目,目前已经坚持快200天了,最近准备搞一个力扣刷题专栏,刷力扣的小伙伴可以期待一下了。
百天勋章
2. 每天传码云
关注我的人都知道,我的仓库已经传了400+了,传仓库的好处我就不介绍了,这四百天的日日夜夜,现在仍在坚持。
3. 每天坚持背单词
不知道大家背单词都用的什么app,我一开始先用的百词斩,后来同学都说不背单词这款软件效果更好,于是八月底我就忍痛割爱了百词斩。
4. 坚持写博客
我来csdn一年多了,23年一共写了104篇博客,通过写博客获得了许多益处,不仅锻炼了自己的创作能力,而且还收获了许多志同道合的朋友们。
5. 坚持跑步锻炼
在追求技术的同时,也要关注自己的身体和心理健康。确保有足够的休息和娱乐时间,保持平衡的生活。
二、这一年的学习历程
23年1月到4月
23年1月到4月,我系统的学习了C语言。
期间ChatGPT和文心一言的爆火,让编程更加简单。
23年5月到6月
23年5月到6月,我自学了python,并参加了新星计划。
获得了实力新星奖的证书和赛道的top1。
6月我还学了些Java语言,并创建了专属于Java的专栏。
6月我的勤写标兵已经达到了四级
23年7月
7月我简单了解了docker,也创建了专属于docker的专栏,该专栏发了15篇内容,文章平均质量分 98,这是我的docker的专栏,欢迎大家订阅,后续持续更新。
七月份我还报名当了新星计划的导师,并带领60多人学习了Java
23年8月
8月我参加Apollo自动驾驶征文活动,并发布了一些文章,收获蛮大的。
23年9月
9月我参加了索尼的创意征文活动,与机器人进行了有趣的互动!
23年10月
10月我测评了ToDesk 、TeamViewer、AnyDesk远程控制软件稳定性。
23年11月
11月有点忙,只发了一些送书的文章。
23年12月
12月忙着学校的期末考试学校的课程,没怎么发博客。
三、这一年取得的成就
粉丝量的进步
热榜第一上过N次
2023年新星计划导师双证书
文心一言使用权
坚果哥受邀西安大会
感谢胡老师的热情款待
钉钉阿里云
索尼征文获奖证书
四、关于编程的新年Flag
新的一年,大家是否已经准备好迎接新的挑战和机遇了呢?让我们一起立下新年Flag,为自己设定一些小目标,让我的2024更加精彩!
2024年,我准备学习个新技术, 确定学习一门新的编程语言、框架或工具,并深入了解其特性和用途。并参与开源项目,贡献到开源项目是提高编程技能的好方法。你也可以选择一个感兴趣的项目,解决一些问题或者提出新的功能,这有助于你学习协作开发和提高代码质量的经验。
2024年,我准备深入研究算法和数据结构,对算法和数据结构的深入了解有助于解决复杂的编程问题。制定计划,逐步学习和应用这些概念,提高解决问题的效率。
2024年,我准备参与一些编程挑战,每周或每月参与一些编程挑战,例如LeetCode、牛客网等,蓝桥杯也在准备。想找一个自己感兴趣的项目,可能是一个应用、一个网站或者一个工具。通过这个项目,应用所学的知识,锻炼项目管理和开发的技能。并定期学习更新、订阅技术博客、参加技术会议、听取讲座等方式,保持对行业动态的了解,不断更新自己的知识。
五、我的最佳代码实践
把二叉搜索树转换为累加树,我觉得这是2023年当中做的最有意思的题目。
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。
提醒一下,二叉搜索树满足下列约束条件:
- 节点的左子树仅包含键 小于 节点键的节点。
- 节点的右子树仅包含键 大于 节点键的节点。
- 左右子树也必须是二叉搜索树。
递归函数参数以及返回值
这里很明确了,不需要递归函数的返回值做什么操作了,要遍历整棵树。
同时需要定义一个全局变量pre,用来保存cur节点的前一个节点的数值,定义为int型就可以了。
代码如下:
int pre =0;// 记录前一个节点的数值
void traversal(TreeNode* cur)
确定终止条件
遇空就终止。
if(cur == NULL)return;
确定单层递归的逻辑
注意要右中左来遍历二叉树, 中节点的处理逻辑就是让cur的数值加上前一个节点的数值。
代码如下:
traversal(cur->right);
cur->val += pre;
pre = cur->val;
traversal(cur->left);
递归法整体代码如下:
classSolution{
private:int pre =0;
void traversal(TreeNode* cur){if(cur == NULL)return;
traversal(cur->right);
cur->val += pre;
pre = cur->val;
traversal(cur->left);}
public:
TreeNode* convertBST(TreeNode* root){
pre =0;
traversal(root);return root;}};
Java
递归
classSolution{int sum;publicTreeNodeconvertBST(TreeNode root){
sum =0;convertBST1(root);return root;}publicvoidconvertBST1(TreeNode root){if(root ==null){return;}convertBST1(root.right);
sum += root.val;
root.val = sum;convertBST1(root.left);}}
迭代
classSolution{publicTreeNodeconvertBST(TreeNode root){int pre =0;Stack<TreeNode> stack =newStack<>();if(root ==null)//edge case checkreturnnull;
stack.add(root);while(!stack.isEmpty()){TreeNode curr = stack.peek();if(curr !=null){
stack.pop();if(curr.left !=null)
stack.add(curr.left);
stack.add(curr);
stack.add(null);if(curr.right !=null)
stack.add(curr.right);}else{
stack.pop();TreeNode temp = stack.pop();
temp.val += pre;
pre = temp.val;}}return root;}}
这一年,我们从平凡中看见风采,在奔忙中体现风格,在时光的斑驳里镌刻下熠熠生辉的印记。讲到这里,我的CSDN 年度总结终于画上了一个圆满的句号。知识改变命运,学习成就未来,感谢CSDN这个平台,让我可以和大家一起交流学习,共同进步,在这一年中,我不仅收获了粉丝量,也结交了许多志同道合的朋友们,也学到了很多知识。2024年我们都会变得更好,一起加油吧!
版权归原作者 热爱跑步的恒川 所有, 如有侵权,请联系我们删除。