自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 ubuntu虚拟机搭建xv6操作系统实验环境

(20版本比较推荐,安装快。22版本安装慢,23版本我在实验的时候安装失败。推荐cpu核数8以上,后面编译会比较快。

2023-07-01 23:35:51 570

原创 TCP建立连接为什么要三次握手而不是两次? 从全双工通信的角度理解

单纯从浪费网络延迟导致的浪费资源的角度去否定两次握手,感觉这个理由很牵强,这样的浪费三次握手其实也并不能避免。简单化处理 A B的握手细节。突出主要矛盾。如果TCP是两次握手的话。从A的视角来看。“我给B发出一个消息,又收到了回复,那么我可以确定, 我和B之间的通信的路(物理层)是通的”关键点 如果这个物理层是全双工通信的?A对这个物理链路的理解会是但B对这个物理链路的理解即B可以确定从A到B这条路是通的,但因为B发给A信息后没有收到A的回复,所以B不能确定是不是从B到A的这条路本身就不

2020-06-23 17:34:34 656

原创 VMware虚拟机配置静态IP后,连不了宿主机和外网

虚拟机配置静态IP后不需要关闭VMware的DHCP服务。勾选这个后重启虚拟机,这样虚拟机既有自己的固定IP,又能连接外网和宿主机虚拟机内要配置DNS Server。不同情况这个解决方案可能会无效。

2020-06-11 22:39:00 1710

原创 逆序栈 只能使用递归函数和有限变量 理解递归才能知道怎么构造递归

stack = [1,2,3] 逆序之后就是 stack = [3,2,1]怎么实现这个功能呢?我们先写一个reverse(stack),返回逆序好的栈def reverse(stack): do something ... return stack容易发现,当栈为空时不需要返回,可以把栈为空作边界条件reverse函数又丰富了一些def reverse(stack): if not stack: return else: do

2020-06-01 11:38:25 184

原创 二叉树递归套路

在返回要求的信息之外还要返回一些冗余信息。根据由左右子树怎么得到这个树,来考虑需要的所有信息。暴力递归只返回了题目要求的信息,只靠这些信息,不能由左右子树得到这个树所需要的信息,可能还需要去递归左右子树的子树,这样时间复杂度就是O(N^2),而树DP的方式,时间复杂度是O(N)...

2020-05-28 22:25:19 268

原创 二叉树反序列化 非递归实现

生成随机二叉树并彩色打印参考这个链接前序遍历时间复杂度O(N), 额外空间复杂度O(lgN)的解法前序遍历的序列化和非序列化 递归实现# 前序序列化def serializeTree(head): if not head: return [None] strLeft = serializeTree(head.left) strRight = serializeTree(head.right) return [head.val]+strLeft+strR

2020-05-28 03:54:38 210

原创 链表的荷兰国旗问题 分成小中大三部分 哑节点实现

生成随机长度的链表将单向链表按某值划分成左边小、中间相等、右边大的形式。注意 给定的值是任意的。创建小,等,大3组共6个哑节点。把小于给定值的节点链接到L节点后把等于给定值的节点链接到M节点后把大于给定值的节点链接到R节点后使用哑节点, 把这三部分链表链接起来,不需要讨论某部分为空的情形,比设定头尾指针为None代码更简洁def partion(head, pivot): L = Lhead = Node(None, None) M = Mhead = Node(None, N

2020-05-25 23:14:13 118

原创 判断列表是否回文 时间复杂度O(N) 额外空间复杂度O(1)

生成随机长度链表时间复杂度O(N) 额外空间复杂度O(1)的解N:链表长度(问题的规模)通过快慢指针找到中点节点 遍历N反转中点右边节点的指向 遍历0.5N判断是否回文 遍历0.5N恢复中点右边的节点的指向 0.5N总的需要遍历链表2.5N次def isPalindrome(head): if not head or not head.next: return True # 快慢指针 slow = fast = head while fast.

2020-05-25 18:16:01 399

原创 生成随机链表 打印链表

生成随机长度的单向链表class Node(object): def __init__(self, value=None, next=None): self.val = value self.next = next def __repr__(self): return "Node:{0.val!s}".format(self) def __str__(self): next = None if s

2020-05-25 18:01:31 477

原创 链表中间节点 快慢指针的基础应用

基本方法:使用快慢指针,慢指针每次向后移动一个节点,快指针移动两个节点。针对特殊要求再修改快慢指针的起始位置等细节。对数器选择:使用列表保存每个节点,直接求中间节点,比对两种方法的输出。1)输入链表头节点,奇数长度返回中点,偶数长度返回上中点def midOrUpMid(head): if not head: return slow = fast = head while fast.next and fast.next.next: slow = s

2020-05-25 15:01:52 144

原创 生成随机二叉树并彩色打印

定义节点class Node(object): def __init__(self, value=None, left=None, right=None): self.val = value self.left = left self.right = right def __str__(self): return 'Node:value={0.val!s}, left={0.left.val!s}, right={0.ri

2020-05-25 11:15:19 304

原创 树的遍历 所有遍历方式,这一篇就够了

遍历二叉树,没有头绪?参考https://blog.csdn.net/weixin_39255587/article/details/106307651打印二叉树,横向纵向 https://editor.csdn.net/md/?articleId=106323813按遍历顺序打印节点值和它的下标前序遍历def preorder(root): stack = [root] index = -1 while stack: finish = stack.pop()

2020-05-25 00:30:34 2115

原创 树的横向打印 纵向打印

横向打印树水平打印树,选择右中左遍历的原因。右树在根节点的上面,左树在根节点的下面,按照从上到下的顺序打印就是右中左的遍历方式。def printTree2(root, depth=0): s = '' if not root: return s sright = printTree2(root.right, depth+1) print('\033[5;30m|\033[0m '*depth+"\033[1;31m"+root.val+"\033[0

2020-05-24 23:52:39 406

原创 递归改写成非递归的两种套路 Python实现

递归改写成非递归的两种套路 Python实现1 模拟系统调用栈编译器使用堆栈传递函数参数、保存返回地址等、这里我们把子问题的参数都压入栈中,通过顺序判断参数对应的过程是否执行来模拟返回地址,即下步应该做什么。例子1:汉诺塔问题(属于中序遍历)汉诺塔递归解def hanoi(n, a, b, c): """ 常规的汉诺塔问题,可以直接从a到c :param n: 数量 :param a: 起始位置 :param b: 辅助位置 :param c: 目标

2020-05-23 22:45:38 1175

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除