![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 74
张无忌打怪兽
工作多年的后端,分享一些技术上的经验总结。
展开
-
一文搞懂线段树
线段树(segment tree),顾名思义,是用来存放给定**区间(segment,or interval)内对应信息的一种数据结构。与树状数组(binary indexed tree)相似,线段树也用来处理数组相应的区间查询(range query)和元素更新(update)**操作。与树状数组不同的是,线段树不止可以适用于区间求和的查询,也可以进行区间最大值,区间最小值(Range Minimum/Maximum Query problem)或者区间异或值的查询。原创 2023-12-15 08:11:18 · 63 阅读 · 0 评论 -
一文搞懂差分数组
对于已知有nnn个元素的离线数列ddd,我们可以建立记录它每项与前一项差值的差分数组ffffidii0di−di−11≤in\right.fididi−di−1i01≤in。原创 2023-12-15 08:10:40 · 45 阅读 · 0 评论 -
一文搞懂字典树
前缀树,又称字典树、单词查找树、TrieTrieTrie树(发音类似 try)。它是一棵NNN叉树。前缀树的每一个结点代表一个字符串的前缀。每一个结点会有多个子结点,通往不同子结点的路径上有着不同的字符。子结点代表的字符串是由结点本身的原始字符串,以及通往该子结点上所有的字符组成的。前缀树的一个重要的特性是,结点所有的后代都与该结点相关的字符串有着共同的前缀,这是前缀树名称的由来。例如,以结点"b"为根的子树中的结点表示的字符串,都具有共同的前缀"b"。反之亦然,具有公共前缀。原创 2023-12-15 08:08:37 · 15 阅读 · 0 评论 -
归并排序、快速排序
冒泡排序、插入排序、选择排序这三种排序算法,它们的时间复杂度都是O(n²),比较高,适合小规模数据的排序。归并排序和快速排序时间复杂度为O(nlogn),适合大规模的数据排序。归并排序和快速排序都用到了分治思想。原创 2023-12-15 08:07:18 · 33 阅读 · 0 评论 -
冒泡排序、插入排序、选择排序
元素,也就是 5 对比,发现 6 比 5 大,是有序区间最大的元素,所以此次遍历结束。但是此时有序区间已经是。原创 2023-12-15 08:06:43 · 38 阅读 · 0 评论 -
二分查找法计算一个数的平方根
本文求平方根的思想在于,将原来一个整数的区间拆分成多个小的区间,然后在所有的这些小区间里面依次二分找到最终合适的那个数。原创 2023-12-15 08:05:35 · 62 阅读 · 0 评论 -
二分查找法变形问题
/ 2. 在有序数组中查找最后一个值等于 $value 的元素$low = 0;// 最终只剩两个元素的时候,$mid 指向小的元素} else {// 如果 mid 是最后一个元素,则直接返回 count($arr) - 1。// 如果不是,判断 $arr[mid + 1] 的值是否不等于 value,如果不等于 value,则说明 $arr[$mid] 就是最后一个等于 value 的元素了return -1;原创 2023-12-15 08:03:01 · 17 阅读 · 0 评论 -
循环有序数组二分查找
我们按照普通二分查找的方式获取中点,这个时候和普通有序数组有一个不一样的地方,有可能这个数组不是单调递增的。原创 2023-12-15 08:02:09 · 72 阅读 · 0 评论 -
01背包问题里的动态规划思想
背包问题描述:给定n件物品,物品的重量为weights[i],物品的价值为values[i]。现挑选物品放入背包中,假定背包能承受的最大重量为W,问应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大?01背包问题算是动态规划里面的基础问题了,网上已经有很多讲解01背包问题的文章了,而且讲得也很好。动态规划:关于01背包问题,你该了解这些!动态规划:关于01背包问题,你该了解这些!(滚动数组)图解 | 你管这破玩意叫动态规划。原创 2023-12-15 07:58:18 · 46 阅读 · 0 评论