算法学习

算法

数据结构(线性-数组 链表 堆栈 队列 哈希 |  树-二叉树 图 其他-跳表 哈希链表 位图 )

时间复杂度:线性-n 对数-logn 常量-2 多项式-0.5n^2+0.5n    1<logn<n<n^2

空间复杂度:常量-1 线性-n 二维空间-n^2 递归空间

 

数组,顺序存储,读和更新O(1),插入和删除O(n)

链表,读O(n),写 更新 删除为 O(1)

 

一个逻辑结构,可由多个物理结构实现

逻辑:线性(顺序表 堆栈 队列=>双端队列+优先队列) 非线性(树 图)

物理:顺序(数组) 链式(链表) ==> 时间复杂度为 O(1)

 

散列表:读写为 O(1) ,哈希冲突(开地址法-冲突后寻找下一个空位,链表法-拉出链条-红黑树) 扩容(扩充长度 + 重新Hash)

 

堆排序

二叉树:链式存储结构(left-data-right)+数组(父节点 parent + 左孩子 2*parent+1 + 右孩子 2*parent+2)

数组用完全二叉树,稀疏二叉树浪费空间

二叉树的遍历(深度优先(前-根左右 中-左根右 后-左右根 序遍历) 广度优先(层级遍历))

二叉树的四种遍历方式分别是:先序、中序、后序和层次。O(n) 宽度+深度

二叉堆,本质是完全二叉树。大顶堆,小顶堆,上浮和下沉,实现上可考虑数组。场景是用于优先队列,出入队列

 

比较排序

冒泡排序:打标记,如果已经有序则终止外部循环;设定有序数列边界,减少外部循环次数。衍生:鸡尾酒排序,左往右比较,右往左比较

快速排序:基准元素随机选择,单边和双边循环法

 

线性排序

计数排序:元素个数

桶排序:区间原理

 

 

算法运用:

tag:bitmap存储用户标签,容易获取交集和并集 | 通过与全量用户进行异或操作可取反

lru:区分常用区和非常用区,自动淘汰机制

red: 二倍均值,线段切割 ,都是为了保持数据均衡

 

面试算法:

有环:追击问题,一点比另一点多走一步

最小元素的栈:两个栈,两个同时入栈,表大小,大则只进第一个栈,小则同时进入两个栈,

最大公约数:暴力枚举 辗转相除 更相减损术  更相减损术与移位相结合

2的整数次幂:十进制转换成2进制,减去一,进行按位与运算

最大相临差:桶排序,每个桶差值大小

栈模拟队列:两个栈,倒一遍,后进先出变为先进先出

全排列下一个:保持最高位不变,数字顺序小变大,又称字典排序

删除k个数字之后最小值:某个数字大于右边的,就删除它

大整数相加:两个大整数倒序,进位后,反向就是结果值

金矿问题:动态规划 ,又称背包问题,挖与不挖的问题,0为边界

缺少整数:整数求和,依次相减

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值