算法常识

1.链表

1.链表反转 可以使用3个指针,逐步遍历然后反转链表;可以使用栈,后入先出重新组织链表
2.链表是否有环 可以使用map、hash等key唯一的方便查找的数据结构,遍历链表,发现重复节点即为有环;可以使用快慢指针,如果有环快指针一定会赶上慢指针
3.有环链表的入口 可以使用Map、hash方法,查到重复节点就是环的入口交点;可以使用快慢指针,保证快指针每次移动2步,慢指针移动1步,当快慢指针相等时候,让快指针=头节点从头开始走,每次走1步,慢指针每次也走1步。最后相遇时候就是入口,可以数学证明。

2.树

1.二叉树先序遍历可以使用递归,也可以使用栈来实现

void preorder(node *T) {
	if (T) {
		visit(T);
		preorder(T->Lchild);
		preorder(T->Rchild);
	}
}

2.迷宫算法可以使用广度优先搜索,可以得到最优解。首先入口点入队列标记为灰色,然后入口点所有能到达的点入队列标记为灰色,入口点标记为黑色,对列向后移动,将队列的首个点的所有能到到的点入队列,并将首个点标记为黑色,如此循环直到找到出口点。队列中节点中加上父节点号,从而知道整条通路。
广度优先搜索使用队列,深度优先搜索使用栈,因为有回溯。
3.huffman编码,是讲所有节点当成一个只有一个根节点的树,然后取这森林里最小的两颗树组成一课新树放在森林里,重复直到剩余一棵树。

3.字符串

1.求子串匹配的位置
https://blog.csdn.net/gao506440410/article/details/81812163

4.排序

https://blog.csdn.net/hellozhxy/article/details/79911867

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值