算法
文章平均质量分 88
悬浮海
正在准备系列内容,更新较少。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java标准库中使用的栈和队列
java栈和队列原创 2023-02-18 19:57:32 · 124 阅读 · 0 评论 -
位运算与随机数
位运算与随机数的使用、内在的联系原创 2023-08-04 14:51:53 · 224 阅读 · 0 评论 -
前缀和-数组中关于求和问题
前缀和原创 2023-07-09 10:50:13 · 153 阅读 · 0 评论 -
堆与堆排序、优先级队列
Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的。我们先看PriorityQueue。PriorityQueue的底层默认是小根堆!如果需要大堆需要用户提供比较器。用户自己定义的比较器:直接实现Comparator接口,然后重写该接口中的compare方法即可;或者实现Comparable接口,重写compareTo方法。原创 2023-05-22 17:19:51 · 297 阅读 · 0 评论 -
贪心算法(贪心与动态规划的区别)
是因为我们在计算第十步的最优解的时候其实把1-9步的组合的情况都计算了,选择了其中最优的解,也就是第八步的解,其实第十步解的构成与第九步没有关系,动态规划相当于穷举了1-9步最优情况下的组合,选了其中最优的作为第十步的最优解,而贪心算法第十步的最优解肯定是由第九步构成的。求一个问题的最优解相当于遍历所有的子集来找最优解,但是这样解随着解空间的维度成指数增长,动态规划其实就是一种遍历,但是他是带备忘录的遍历,对于前面算到的子问题,仅就不在计算而是直接查看备忘录,直接调用之前保存的值,这样就节省了大量的时间。原创 2023-04-22 17:26:41 · 903 阅读 · 0 评论 -
动态规划解题总结
动态规划原创 2022-07-16 12:00:56 · 94 阅读 · 0 评论 -
动态规划-背包问题
动态规划-背包问题原创 2023-04-16 18:11:29 · 129 阅读 · 0 评论 -
双指针与滑动窗口方法总结
双指针原创 2022-04-14 21:36:43 · 649 阅读 · 0 评论 -
二叉树刷题总结
文章目录一、深度优先遍历(DFS)1.1、二叉树遍历框架(递归)1.2、二叉树遍历框架(迭代)二、广度优先遍历(BFS)三、100. 相同的树四、101. 对称二叉树五、104. 二叉树的最大深度之前说到,算法是有框架的,刷题可以从二叉树开始,因为二叉树是最容易培养框架思维的,而且大部分算法技巧,本质上都是树的遍历问题。/* 基本的二叉树节点 */public class TreeNode { int val; TreeNode left; TreeNode right;原创 2022-02-21 23:18:29 · 206 阅读 · 0 评论 -
算法-数据结构基础知识
文章目录一、始二、基础知识2.1、数据结构概述2.1.1、数据的逻辑结构2.1.2、数据的存储结构2.1.3、对数据的操作2.2、数据类型2.2.1、基本数据类型2.2.2、引用数据类型2.3、运算符三、数据结构知识3.1、线性表(List集合)3.1.1、线性表的顺序存储结构3.1.2、线性表的链式存储结构3.1.2.1、链表遍历3.2、串(字符串)3.2.1、字符串类3.3、栈3.4、队列3.5、递归3.6、数组3.6.1、一维数组3.6.1.1、数组遍历3.6.2、二维数组3.7、广义表3.7.1、广原创 2021-07-30 16:47:57 · 202 阅读 · 0 评论 -
查找之散列表
文章目录4.2.1、散列函数4.2.2、冲突4.2.3、设计散列函数4.2.4、处理冲突4.2.4.1、开放地址法4.2.4.2、链地址法(数组+链表)散列 ,是一种按关键字编址 的存储和查找技术,散列表 ,根据元素的关键字确定元素的存储位置,其查找、插入和删除操作效率接近O(1),是目前查找效率最高的一种数据结构。(也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。)散列技术的关键问题在于设计散列函数和处理冲突。4.2.1、原创 2022-01-24 16:50:19 · 222 阅读 · 0 评论 -
查找之二分搜索
文章目录4.1.1、零、二分查找框架4.1.2、寻找一个数(基本的二分搜索)left <= right 的情况left < right的情况**所以:对于所有的查找,一定要确定 搜索区间 是否覆盖了所有的情况!!!**4.1.3、寻找左侧边界的二分搜索4.1.4、寻找右侧边界的二分查找4.1.5、逻辑统一经典问题:已知value数组元素按升序排序,在begin~end范围内,二分法查找关键字为key元素,若查找成功返回下标,否则返回-1;若begin、end越界,返回-1一个二分查找的递归算原创 2022-01-24 16:36:59 · 126 阅读 · 0 评论 -
1.插入排序(直接插入排序、二分插入排序和希尔排序)
文章目录插入排序(直接插入排序、二分插入排序和希尔排序)1、直接插入排序2、折半插入排序(二分插入排序)3、希尔排序(改进的插入排序)3.1、希尔排序算法分析插入排序(直接插入排序、二分插入排序和希尔排序)插入排序算法思想:每趟将一个元素,按其关键字值的大小插入到它前面已排序的子序列中,依此重复,直到插入全部元素。插入排序算法有直接插入排序、二分法插入排序和希尔排序。1、直接插入排序直接插入排序(Straight Insertion Sort)算法描述如下:1、第i (1<i<n)趟,线原创 2021-11-02 01:09:54 · 236 阅读 · 0 评论 -
2.交换排序(冒泡排序和快速排序)
文章目录交换排序(冒泡排序和快速排序)冒泡排序快速排序快速排序算法分析交换排序(冒泡排序和快速排序)基于交换的排序算法有两种:冒泡排序和快速排序。冒泡排序冒泡排序算法描述:比较相邻两个元素大小,如果反序,则交换。若按升序排列,每趟将数据序列中的最大元素交换到最后位置,就像气泡从水里冒出一样。冒泡排序算法分析:最好情况,数据序列排序,只需一趟扫描,比较n次,没有数据移动,时间复杂度为O(n)。最坏情况,数据序列随机排列和反序排列,需要n-1趟扫描,比较次数和移动次数都是O(n2),时间复杂度为(原创 2021-11-02 01:11:36 · 184 阅读 · 0 评论 -
3.选择排序(直接选择排序和堆排序)
文章目录选择排序直接选择排序堆排序堆的概念堆的存储堆排序选择排序选择排序算法有两种:直接选择排序和堆排序。直接选择排序直接选择排序(Straight Select Sort)算法思想:第一趟从n个元素的数据序列中选出关键字最小/大的元素并放到最前/后位置,下一趟再从n-1个元素中选出最小/大的元素并放到此前/后位置,以此类推,经过n-1趟完成排序。(就是一遍一遍的选择出最小/大的,所以)直接选择排序算法分析:直接选择排序的比较次数与数据序列数与初始排列有关,第i趟排序的比较次数是n-1;移动原创 2021-11-08 16:17:59 · 137 阅读 · 0 评论 -
4.归并排序算法
归并排序归并排序是将两个排序的子序列合并,形成一个排序数据序列,又称两路归并排序。算法描述:关键字序列 {97,82,75,53,17,61,70,12,61,58,26} 的归并排序(升序)过程如下图,{}表示子序列。将n个元素的数据序列看成由n个长度为1的排序子序列组成,反复降相邻的两个子序列归并成一个排序子序列,直到合并成一个序列,则排序完成。归并排序算法分析:n个元素归并排序,每趟比较n-1次,数据移动n-1次,进行log2n趟,时间复杂度为O(n*log2n)。归并排序需要O(n)容原创 2021-11-07 20:37:08 · 138 阅读 · 0 评论 -
5.计数排序、基数排序、桶排序
计数排序、基数排序、桶排序文章目录计数排序、基数排序、桶排序1、计数排序(桶思想排序用的最多的一种)2、基数排序3、桶排序4、三种排序比较桶思想,适用范围:量大但取值范围小。比如:如何快速得知高考名次?、某大型企业数万名员工年龄排序。非比较排序。计数排序,基数排序,桶排序等非比较排序算法,平均时间复杂度都是O(n)。这些排序因为其待排序元素本身就含有了定位特征,因而不需要比较就可以确定其前后位置,从而可以突破比较排序算法时间复杂度O(nlgn)的理论下限。1、计数排序(桶思想排序用的最多的一种)原创 2021-11-14 22:46:00 · 218 阅读 · 0 评论
分享