![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法基础
文章平均质量分 88
程序员 Hasity
个人博客:www.52algo.com
展开
-
Dijkstra求最短路(图解)
迪杰斯特拉算法适用于求正权有向图中,源点到其余各个节点的最短路径。注意:图中可以有环,但不能有负权边。例如:如下图就不能使用迪杰斯特拉算法求节点 1 到其余各个节点的最短距离。原创 2023-10-14 19:30:08 · 298 阅读 · 0 评论 -
基础算法04---高精度运算
接下来,调用 div 函数实现除法运算,该函数的实现方式是:从 A 最高位开始按位逐步进行除法运算,将商存储在变量 C 中,余数存储在变量 r 中。例如对个位计算: A[0] + B[0] = 7 + 8 = 15, 结果个位上是 5, 进位是 1. 所以 C[0] = 5, 进位 t = 1。如果 第一行整数 - 第二行整数 < 0,那么前置一个负号,将 A - B 改成 B - A等价于 A - B = - (B - A)给定两个非负整数(不含前导 0) A,B,请你计算 A/B的商和余数。原创 2023-05-19 17:06:15 · 53 阅读 · 0 评论 -
基础算法03---二分
假设初始时我们的二分区间为[l,r],每次二分缩小区间时,如果左边界l要更新为 l = mid,此时我们就要使用模板2,让 mid = (l + r + 1)/ 2,否则while会陷入死循环。如果写完之后发现是l = mid,那么在计算mid时需要加上1,否则如果写完之后发现是l = mid + 1,那么在计算mid时不能加1。当mid * mid * mid >= x,也就是mid>x的三次方根的时候,mid是右边界,所以r=mid,当mid原创 2023-05-16 17:59:15 · 42 阅读 · 0 评论 -
基础算法02---归并排序
合并过程中计算逆序对:[3, 4] 与 [1, 2] 合并,总逆序对数量 = 4(最开始 3 和 1 比较,因为 3 > 1, 所以逆序对为 mid - l + 1 = 1 - 0 + 1 = 2 个。此外,在归并的过程中统计逆序对的数量,每次合并两个有序数组时,都会将一个右半边的数加入到临时数组中,这个右半边的数会与左半边的数组成逆序对,因此需要进行统计。归并排序步骤2:[4, 3], [2, 1] -> [4], [3], [2], [1]归并排序步骤4:合并 [2], [1], 得到[1, 2]原创 2023-05-16 17:08:19 · 49 阅读 · 0 评论 -
基础算法01---快速排序
我们mid本质是为了将q[mid]这个定值给记录下来作为标记,如果在while循环中再使用q[mid],而在while循环外不去标记的话,我们所标记的仅仅是mid的下标,而不是值,在swap交换代码的时候,mid这个位置的值可能会被交换掉,最后导致结果不一样。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。我们有一个待排序的数组,长度为n。原创 2023-05-16 15:53:06 · 168 阅读 · 0 评论 -
实现并查集
集合的一些操作,例如,交集,并集等等,这里的 “并” 其实就指的是并集操作,两个集合合并后就会变成一个集合。例如:那 “查” 又是什么呢?集合本身只是容器,最终还是要知道里面存的是什么元素,因此这里的 “查” 是对于集合中存放的元素来说的,即要查找这个元素在不在集合中,还要确定这个元素是在哪个集合中。好了,现在知道并查集是什么,以及它能干什么了,总结下来就是:并查集可以进行集合合并的操作(并)并查集可以查找元素在哪个集合中(查)并查集维护的是一堆集合(集)并查集本质就是集合。原创 2022-12-02 21:14:36 · 198 阅读 · 0 评论