欢迎您的访问
专注架构,Java,数据结构算法,Python技术分享

算法系列

计算右侧小于当前元素的个数

站长阅读(512)赞(0)

计算右侧小于当前元素的个数 解题思路 1、 暴力算法,两层for循环嵌套, O(n^2) 最后测试会超时,需要优化。 2、 方法1:使用 BST(二叉搜索/排序数) BST(二叉搜索/排序数) Java代码 class Solution {...

全排列

站长阅读(463)赞(0)

全排列 解题思路 解决一个回溯问题,实际上就是一个解决策树的遍历过程。你只需要思考3个问题: 1、 路径:也就是已经做出的选择。 2、 选择列表:也就是你当前可以做的选择。 3、 结束条件:也就是到达决策树底层,无法再做选择的条件。 回溯算...

二叉树的层序遍历

站长阅读(609)赞(0)

二叉树的层序遍历 解题思路 DFS 与 BFS 让我们先看看在二叉树上进行DFS遍历和BFS遍历的代码比较。 DFS 遍历使用递归: void dfs(TreeNode root) { if (root == null) { return;...

二分查找的实现与特性

站长阅读(490)赞(0)

二分查找的实现与特性 二分查找的前提 1、 目标函数单调性(单调递增或者递减) 2、 存在上下界(bounded) 3、 能够通过索引访问(index accessible) 这三个前提条件的话简单说来,一定要把它形成肌肉式记忆。 第一单调...

【排序算法】基数排序

站长阅读(520)赞(0)

基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 1. 基数排序 vs 计数排序 vs 桶排序...

【排序算法】桶排序

站长阅读(643)赞(0)

桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点: 在额外空间充足的情况下,尽量增大桶的数量 使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中 ...

【排序算法】计数排序

站长阅读(503)赞(0)

计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 1. 动图演示 2. JavaScript 代码实现 function countingSor...

【排序算法】堆排序

站长阅读(475)赞(0)

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法: ...

【排序算法】快速排序

站长阅读(455)赞(0)

an’fa快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法...

【排序算法】归并排序

站长阅读(484)赞(1)

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法: – 自上而下的递归(...