后台开发1-3章读书笔记

前言

     本来想着再开一个仓库的,但是感觉乱七八糟的仓库开太多了也不是特别好,就直接加到博客里面了。

chapter 1 c++ 基础

     再次吐槽一下,没有vim8是真的难用,权当锻炼自己手速了。

  • 使用unio来进行判断自己机器是big endian还是small endian,一般来说网络传输之中都采用的是big endian。
  • 另外一个就是内存对齐,觉得书里面讲得不够详细,可以去看知乎这篇帖子,主要提到了一个#pragma pack(n)的问题,文中好像出现了一个错误就是pack应该是取最大成员和默认pack的较大值,主要还是为了取址方便,进行计算的时候相当于先按照对齐单位去取,要是一个对其单位大小的空间不够的话,就会增加一个对齐单位大小的空间。\
阅读更多

9月27号leetcode每日一题

原题链接:填充右侧节点

思考过程

     说实话这道题做的蛮差的,或者是我现在在写思路的时候心情有点不大好,午睡没睡好,头有点晕。普通的BFS当然没什么问题,但是不满足常数空间的要求,不过这道题出的要求也不是特别严谨,递归所产生的空间不算到空间复杂度里面,这本身就有点扯。
     这道题思路还是借鉴官方题解之后才写出来的,其实还是层序遍历的板子,大概就是一行从左到右,在遍历这一行的时候将下一行的节点的next都连接起来了。然后使用一个nextstart来存储下一行开始的节点。
     不过感觉这道题的本质还是在考察BFS,递归产生的空间不算就当个笑话好了。

阅读更多

9月27号leetcode每日一题

原题链接: 二叉搜索树的最近公共祖先

思考过程

     刚开始还没有看到二叉搜索树这个条件,就按照普通二叉树去做的,但是其实仔细考虑二叉搜索树这个条件其实很好写递归,因为祖先节点的值肯定在目标两节点的中间,如果当前遍历节点的值在两个目标节点值的中间就一定是那个公共节点,这是因为这种情况下,p,q两个节点分布在左右子树,所以寻找的节点必然是root节点。
     如果不是分别在两棵子树上,然就是两个节点都在左边或者都在右边,所以此时root->val会同时大于或者同时小于两个节点的值。,按照这个去写递归即可。

阅读更多

9月26日leetcode每日一题

原题链接: 路径总和II

思考过程

     这道题之前也写过了,思维量也不大,使用简单dfs就可以解决。大致方法就是从根节点开始递归,然后对于非空的子节点进行递归,递归边界条件为遍历当前节点左右子节点均为空。仔细想了一下好像其他也没有什么要注意的点,另外就是root可能为空,所以要考虑一下cornerc case。

阅读更多

9月24日leetcode每日一题

原题链接: 二叉树中的众数

思考过程

     其实这种题目还蛮恶心的,因为虽然标注的难度是简单,但是往往还有进阶做法,像O(n)时间,O(1)空间这种。像今天这个就属于之前没学过就没法做的那种,题解采用的是Morris遍历以达到O(1)的时间复杂度。

阅读更多

leetcode_0922

原题链接: 监控二叉树

思考过程

     本题目和打家劫舍拿到题目很像,大致就是到每个节点会分不同的情况,比如说本道题中就是是否在该节点安装监控,打家劫舍则是是否在那个节点进行盗窃,每个节点的情况依赖于子节点的状态。

阅读更多

Trie字典树实现

     其实这个拖了很久了,今天总算有机会把字典树的实现自己写一遍了,毕竟这么好的数据结构放着不用确实有些可惜。一次建树,多次查询
     和普通的树结构不一样,一般的树结构都是

1
2
3
4
5
template<class T>
struct TreeNode{
T value;
TreeNode *children[NUM];
};
阅读更多