
基础算法
包括排序、二分、高精度、前缀和与差分、双指针算法、位运算、离散化、区间合并等内容。
熊猫眼101
不管你做什么,都要做到极致
展开
-
简单双指针算法
简单双指针算法算法介绍双指针算法可用来优化算法时间复杂度,其中要的思想是,在一重循环内,通过特定的条件,使快指针每次都移动,慢指针在特定条件下移动一部分。双指针算法通常用来解决这两类问题:1.两个指针分别处在两个序列中,慢指针会在限制条件下移动。2.两个指针位于同一序列中,共同维护一个区间,慢指针为左端点,快指针为右端点。...原创 2022-04-13 22:47:04 · 161 阅读 · 0 评论 -
算法 一维差分
算法介绍差分是为了处理在数列中,进行多次区间数同时+c的操作,并输出操作后的数组。原创 2022-03-20 16:32:24 · 125 阅读 · 0 评论 -
二维前缀和(子矩阵的和)
学习二维前缀和之前,大家可以先去了解一下一维前缀和。https://blog.youkuaiyun.com/qq_63944516/article/details/123495969算法介绍二维前缀和是由一维前缀和推演得到的,在一维前缀和中,我们已经知道了多次查询使用前缀和算法会减少运算次数,从而达到了减少运算时间的目的。二维前缀和的运算的减少二维前缀和比一维前缀的预处理更为复杂,每个sum[][]需要3次加法、1次减法运算。经过预处理后的查询需要1次加法、2次减法运算。原创 2022-03-15 13:17:43 · 2820 阅读 · 1 评论 -
一维前缀和
算法介绍前缀和是为了处理多次加法查询并输出查询结果的基本算法。简单的来说,如果在遇到前缀和问题时,不使用前缀和处理,每次查询需要执行查询范围数据个数次的加法,当查询次数过多,或者查询范围较大时,就需要执行多次加法,当使用暴力解法时会出现时间超限的情况。如果使用了前缀和算法,在所有查询之前,进行一个n次的加法运算(即前缀和预处理),之后的每次查询,仅需要执行一次减法运算。具体做法:首先做一个预处理,定义一个sum[]数组,sum[i]代表a数组中前i个数的和。求前缀和运算:con原创 2022-03-15 10:43:30 · 589 阅读 · 0 评论 -
快速选择c语言
//快选#include<stdio.h>int kuaixuan(int q[], int l, int r, int k){//快选 数组 左边界 右边界 第k个数 if (l == r) return q[l];//如果左边界等于右边界,直接返回那个数 int x = q[l], i = l-1, j = r+1; //确定中间值x 左边界 右边界 while (i < j) {//当i>=j循环结束 while (q[++i] &l.原创 2022-01-01 11:31:21 · 537 阅读 · 0 评论 -
快速排序c语言
//快速排序void kuaipai(int q[], int l, int r){//快排 if (l >= r) return;//左边界大于等于右边界结束递归(当q[]有1或0个数) int x = q[(l+r)/2];//确定中间值 int i = l-1, j = r+1; while (i < j) {//当i>=j循环结束 while (q[++i] < x);//如果左边的数大于x停下 wh...原创 2022-01-01 11:26:24 · 1286 阅读 · 0 评论 -
归并排序c语言
#include<stdio.h>//归并排序int tmp[100000] = {0};//tmp不可在函数中定义,由于数组过大会造成栈溢出void guibing(int q[], int l, int r){ if (l >= r) return;//左边界大于等于右边界结束递归(当q[]有1或0个数) int mid=(l+r)/2;//选取中间值 guibing(q, l, mid), guibing(q, mid + 1, r); //对两部分分别递归.原创 2022-01-01 11:42:38 · 568 阅读 · 0 评论