优先队列、图、前缀树、线段树、树状数组

本文整理于【拉勾*力扣】课程笔记,侵删~

 

1、优先队列

向上筛选:每次新元素放在最底部,然后和它的父节点比较,若新元素优先级高,则交换新元素与父节点的位置,直到无法交换

向下筛选:每次新元素放在最顶部,然后和它的两个子节点比较,如果哪个子节点的优先级高,则交换新元素与这个子节点的位置,直到无法交换。

 

2、题目:前K个高频元素(优先队列经典题型)

先使用哈希表记录每个元素的出现次数,然后用哈希表构造一个优先队列,问题迎刃而解

 

3、图

 

4、题目:判断二分图(图的遍历)

 

5、前缀树

 

6、题目:单词搜索(深度优先、前缀树)

解法:

深度优先算法搜索二维网格,得到所有可能的单词列表;

将字典构造成一个前缀树;

遍历单词列表,与前缀树对比,如果可以匹配,继续向下搜索,否则结束

 

7、线段树

 

8、题目:计算右侧小于当前元素的个数

解法:

线段树中每个节点保存的是数组中某一段的总和,对本题目而言,我们可以让每个节点保存一段有序数组的总和。

根节点保存的是数组中最小值到最大值的所有元素的总和,分割根节点为左右两个节点,直接分割结束;

初始时,每个节点的元素个数都为0。从数组的最后一个元素开始遍历;

当遍历元素1时,对应区间的节点元素个数加1,线段树如下图:

当遍历元素6时,对应区间的节点元素个数加1,线段树如下图:

欲求元素【6】右边的数字有几个小于当前元素,也就是1-5区间的数字有几个,我们从根节点出发,左子树【1-3】在【1-5】区间内,直接返回个数1,右子树【4-6】和【4-5】有交集,继续向下遍历【4-5】,无需再分,返回个数0,最终【6】右边的数字有1+0=1个元素小于当前元素,以此类推...

算法复杂度:O(nlogn)

 

9、树状数组

和优先队列类似,优先队列用数组表示完全二叉树,而树状数组是多叉树

和线段树类似

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值