随笔分类 - 算法 & 刷题 & 数据结构
记录在刷算法题过程中的感悟。
摘要:1. 从快排partition过程借鉴而来,利用partion过程每次能确定一个元素位置来实现。 此算法期望时间复杂度为O(N),最差为O(N^2)。 每次确定了一个元素位置后,就能判断待查的topk个元素是在哪个分区,只需要递归一个分区即可。 代码如下: int quickSelect(vecto
阅读全文
摘要:## 快速排序(代码) 写这篇文章之前至少做了不下十遍快排,但现在仍然不能保证一写就A,故记录一下。 partition过程的边界条件不是很好弄,因此面试经常出现。 partition单向划分:三个区域 <= > ? int partition1(vector<int>& nums, int l,
阅读全文
摘要:单调栈 顾名思义,栈,且是单调的-单调递增或递减。 该算法模型能用来解决一类特定的问题,找该位置(左边和右边距离最近的比其大或比其小的元素)。 典型的问题有:下一个更大元素I、II,接雨水,最大矩形,柱状图最大矩阵等。 代码具有典型的套路,下面贴出接雨水的代码: 1 int trap(vector<
阅读全文
摘要:二叉堆数据结构,底层用数组实现,可理解为一棵完全二叉树。 性质:堆序性质,上浮下沉操作都是为了保持堆序性质。 堆可用来排序,求TopK问题等。 代码: #include <iostream> #include <vector> using namespace std; /* 大顶堆 */ class
阅读全文
摘要:链表 链表与数组是两个十分重要的数据结构,是构成线性表的重要组成部分。 链表通常占用的是非连续的地址空间,查找时间O(N),删除和插入时间O(1)。 链表主要有单链表、双向链表、循环单链表、循环双向链表等,在计算机领域应用十分广泛,比如用链表实现的队列应用于进程管理,Hash表的链式存储法等等。 关
阅读全文

浙公网安备 33010602011771号