UDP编程

UdpClient
1 | from socket import * |
Udpserver
1 | from socket import * |
TCP编程

TcpClient
1 | from socket import * |
UdpClient
1 | from socket import * |
Udpserver
1 | from socket import * |
TcpClient
1 | from socket import * |
求解的关键在于画出决策树,并运用合理的剪枝条件。不要跳出此框架自己去想新写法,很容易漏解或者多解
1 | result = [] |
选择列表:避免选当前路径上已经选择过的数字
解决方法:引入used数组,记录从根结点到当前结点的路径信息,判断数字是否被使用
对于连续子序列问题,可以使用滑动窗口。例如按要求得到最长/短的序列
1 | int low = 0, high = 0; |
滑动窗口方法需要考虑两个问题
何时满足题目条件
可能需要用到哈希表来统计元素出现情况
何时缩小范围
当high移动到第一次(不)满足题目要求后,移动low来缩小范围
何时记录结果
如果要记录最长序列则在缩小范围前记录
如果要记录最短序列则在缩小范围后记录
给你一个字符串 s
、一个字符串 t
。返回 s
中涵盖 t
所有字符的最小子串。如果 s
中不存在涵盖 t
所有字符的子串,则返回空字符串 ""
。
示例 1:
二叉树题型的算法主要分为回溯,动态规划,迭代三类。从本质上三者都是在遍历算法基础上的修改。回溯关心的是在每个结点的访问过程中如何更新结果;动态规划关心的是如何拆解出子问题,不具体分析每个结点的状态,而是通过划分子问题让其通过基本问题递归解决;迭代主要是指BFS层序遍历,适用于与深度(或高度)相关的问题求解
1 | class TreeNode { |
1 | class TreeNode { |
前序位置:刚进入当前子树根结点的时候(已知根结点信息)
int fib(int n)
,应该翻译成计算数列第n项并返回数列的值拆解问题:考虑在当前的普通输入时,应该如何解决问题。例如对于斐波那契数数列求解,当前应该返回的值是fib(n-1)+fib(n-2)
。
❗️❗️不要尝试去思考其内部具体是如何执行的,只要把当前函数当作一个已经实现的库函数即可。否则只会越绕越晕。