算法基础面试刷题

引言

leecode刷起来,每天5道题,太笨了,只能相信勤能补拙,在这儿立志。
学会总结类型、思路和相似之处,思路怎么突破的

1基础算法

1.1 双指针类型

这类属于比较基础的问题,包括窗口类型、快慢类型等
框架:

通过多层for循环改进算法
for (i=0;i<n;i++)
	while(j<n)
		if (满足条件)
			j++
			update j
		else
			break;
	update i

时间复杂度最优O(logn)、次优O(n),O(nlogn),O(n^2)

  1. 双指针:最小串覆盖最长无重复子串
  2. 用到了堆的思想:矩阵从小到大的第k数N维数组K大数—先维护一个堆数组;Heap维护候选集合;排序
  3. 用到栈的思想,用来维护信息或者翻转信息,单调递增和单调递减,最大矩形,

1.2 并查集

可以用来判断在不在同一个集合中,集合合并

// find father
int find(int x)
{ 
	if (father[x]==x)
	{
		return x;
	}
	return father[x]=find(father[x])// 非路径压缩 find(father(x))
}
// union sets
void union(int x,int y)
{
	int root_x=find(x);
	int root_y=find(y);
	if (root_x!=root_y)
	{
	father[root_x]=root_y;
	}
}  

时间复杂度压缩路径O(1),不压缩路径O(n)

  1. 连接图岛屿个数

1.3 字典树

index

1.4 图

判断图中有没有环:拓扑排序、DFS\BFS、并查集

  1. 拓扑排序,a)判断入度的大小对于无向图,入度<=1,对于有向图,入度为0; b)将满足条件的节点入队列;c)出队列,对于队列的临街节点度减1 加入队列
  2. 并查集,find union ,对于无向图 如果节点的father相等,则有环;对于有向图,u->v, 如果u的父节点是v则有环
  3. DFS, 如果访问的节点已经访问过了,有环(黑,白,灰染色法)

图有没有环

1.4 二分法

1二分法的深入理解
1.1 二维二分
1.2 按照值阈进行二分
2 扫描线
3 双端队列
解题方法

  1. 找到可行解范围
  2. 猜答案
  3. 检验条件
  4. 调整搜索范围
int start=1,end=max;
while(start+1<end)
{
int mid=start+(end-start)//2
if(check(mid))
{
start=mid;
}
else{
end=mid;
}

1.2 动态规划

根据最终结果,可以分为多少步、有没有、路径等
可以分为坐标型、序列型、划分型、博弈型、背包型、区间型、双序列型等
一般通过最后或者第一步的关系找规律,先确定状态、然后是状态转移方程、最优解。

2 数据结构

队列、树、堆、数据组、栈、链表、图、散列表

| 数据结构类型 | C++ |python|
|:--------😐: -------------😐:-------------------😐
| centered 文本居中 | right-aligned 文本居右 |

数据结构类型C++python
数组int array[]array=[]
栈\队列#include ;q.empty();q.size();q.pop();q.push();q.back();q.push()from Queue import queue, LifoQueue,PriorityQueue
数的遍历,前序:先访问,然后遍历左右子树;中序:第一次进过时不访问,等左子树访问了就访问根节点然后右子树;后序:第一次进过和第二次进过的时候都不访问,等孩子访问完了再访问根节点
#include;priority_queue<Node,vector,less > pqLess;priority_queue<Node,vector,greater > pqGreater;from heapq import *; heappush(heap,5)
散列表#include; map<string,string> namemap;a={}
链表
  1. 数组

字典

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值