
算法
文章平均质量分 61
努力奋斗的张同学
一个又菜又爱玩的同学
算法真的好难,前端和Java知识真的很多,真的需要坚持下去。
展开
-
【C++/Java】详解双指针算法以及与暴力的区别-有序数组和与最长不重复子序列
注意,双指针算法的时间复杂度是O(n),也就是i和j都不会重复扫到一个元素,这里区别于双重循环的O(n^2),在双重循环中,我们的i或者j是有可能一个元素扫描好几次的,一般是n次或者n(n-1)/2或者n(n+1)/2,这里看具体算法了。(许多人认为一层循环嵌套另一层循环,那么时间复杂度就是O(n^2),其实不然,也就是因为这是错误理解,时长分不清双指针和暴力的区别)原创 2023-12-28 16:04:55 · 547 阅读 · 1 评论 -
【C++/Java】详解一维差分算法和二维差分算法(详解前缀和逆运算)
差分序列的构建是为了在原序列中进行一系列的修改操作,而不需要对整个序列进行逐个修改。通过修改差分序列中的某些元素,可以在后续进行前缀和运算时,将修改操作应用到原序列的相应位置上。在一个区域[l,r]插入值的时候呢,通过操作b[i]来做出原数组,这是很棒的想法。我们只需要假设原序列b[i]为0,S[i]也为0,然后输入的值就是插入到前缀和序列中的值,这时候我们只需要通过上面的公式改变原序列的值,通过对差分序列进行逐个累加,可以得到原序列的前缀和序列。原创 2023-12-24 00:35:14 · 1442 阅读 · 0 评论 -
【C++/Java】详解一维、二维前缀和算法
前缀和(prefix sum)是一种常用的数据处理技巧。在一个数列中,前缀和指的是从数列开始到当前位置的所有数的和。也就是说,前缀和是一个新的数列,其第i个元素是原始数列中前i个元素的和,前缀和有可以分为一维前缀和和二维前缀和,一维指的是一个序列,二维指的是一个矩阵的一部分子矩阵的数的和。原创 2023-12-22 18:20:01 · 859 阅读 · 0 评论 -
【C++】详解高精度加法、高精度减法、高精度乘法、高精度除法代码
在进行大整数运算中,因为在C++/C中整数最大也就是unsigned long long也就才(1e19+8e18)位,如果要几百位的相加减就不行了,所以就要用高精度了,这里只在C++/C上使用有价值,在例如python、Java语言上无需写此算法,python可以无限大,Java里有相关库可以引入。原创 2023-12-22 01:38:45 · 3819 阅读 · 0 评论 -
【C/Java】详解二分查找算法-灵活划分红蓝区域法(写代码不再死循环)
如我们需要在下面的序列中找出第一次出现3的位置和最后一次出现3的位置,且找出第一次出现3位置之前的第一个元素2的位置,最后一次出现3的位置的下一个元素4的位置下标。设有q[N]数组,在算法开始时,l的指针是指向-1的,而不是0,且r初始化为n,而不是n-1因为在最初,我们是不知道数组里面元素的任何值的,不知道哪些是蓝色区域,哪些是红色区域。二分查找中,可以把l和r的指针看做是在划分两个红蓝区域,然后寻找边界目标值。同时也找到了第一次出现3位置的左边第一个元素的位置也找到了。原创 2023-12-18 00:32:46 · 584 阅读 · 1 评论 -
【C++/Java】归并排序模板
1.从待排序元素中间进行拆分,一直拆分到只有一个元素,2.把拆分的待排序元素进行两两合并,最后形成一个有序序序列,时间复杂度O(nlog^n)原创 2023-12-12 19:31:03 · 448 阅读 · 0 评论 -
【C++/Java】快速排序模板-分治法的应用
【C++/Java】快速排序模板-分治法的应用。原创 2023-12-12 18:18:30 · 436 阅读 · 0 评论