数据结构与算法
文章平均质量分 84
LeetCode练习记录
虾米奥
这个作者很懒,什么都没留下…
展开
-
希尔排序 | 详细思路、Java代码注释
希尔排序又称为缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。一、原理既然希尔排序是插入排序的改进版本,那么它们之间必定有相似之处。那么得先回忆下什么是插入排序?插入排序就是将一个数组分为两个区间:已排序区间和未排序区间。然后在未排序区间中取一个数,将其按照顺序插入到已排序区间,保证已排序区间一直原创 2021-03-21 16:43:15 · 274 阅读 · 0 评论 -
桶排序 | 详细思路、Java实现与注释
目录一、原理二、实现代码示例三、算法分析一、原理桶排序顾名思义就是得有桶,在桶排序中,我们把未排序数据分成n组,这n组就对应放到n个桶里。那么要把数据放到桶里,有什么规则呢?首先,我们保证这n个桶是有序的;其次,我们把未排序序列分到这些桶里,然后各个桶分别对数据进行排序;最后,我们按照桶的顺序,把里面的数据按序依次取出,得到一个有序序列,那就是我们最终的排序结果。 举个例子,如图,{21,14,2,3,19,23,6,27,3}是一个无序数组,现在我们要用对它进行桶排序。首先把桶的范围划分清楚,原创 2021-03-20 22:32:24 · 364 阅读 · 0 评论 -
计数排序 | 详细思路、Java实现与注释
目录一、原理二、代码实现示例三、算法分析计数排序感觉不难,但是细节比较复杂。一、原理计数排序实质上是桶排序的特殊情况,对于桶排序,当桶的数量等于元素数量时,可以达到最短的排序时长,这种情况不就是一个桶对应一个元素值吗?比如我们有取值范围为1-50的的元素数组,设置50个桶,那就是值相等的元素放到同一个桶里,然后按顺序取出每个桶里的元素,就可以得到一个有序数组了。来看个例子,这有个无序数组 arr={8,4,5,7,1,4,3,6,7,9,7,2},我们要对它使用计数排序。首先,做一下准备工作。计算原创 2021-03-20 21:03:09 · 173 阅读 · 0 评论 -
基数排序 | 详细思路、Java实现
目录一、原理二、实现代码示例三、算法分析一、原理从整数元素的最低位(个位)开始,按照个位元素的值进行排序,得到一个排序结果,然后再根据此结果,在元素的十位上的元素进行排序,得到下一个结果。之后继续往高位进行这样的排序,最高位排序后得到的结果就是最终有序的数组。整个过程就如下图所示,原数组为{122,342,98,6,101},最高位(百位)的排序结果就是最终的有序数组,每一次排序都是建立在上一次排序结果的基础上。可以看到下面的98和6进行了补齐操作,这是因为当位数不同时我们得想办法让他们位数相同,好原创 2021-03-19 16:34:17 · 150 阅读 · 0 评论 -
LeetCode | 209. 长度最小的子数组
题目描述给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。示例:输入:s = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。进阶:如果你已经完成了 O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。思路分析这里采用双指针+滑动窗口的方法。那么什么是滑动窗口呢?如图,以 s =原创 2020-10-19 14:12:13 · 169 阅读 · 0 评论