基础算法
文章平均质量分 61
讲解基础算法实现和细节
c++机械师
计科菜鸡一名
展开
-
基础算法(8):高精度加减乘除
为什么要有这么一种算法?因为当我们想需要对两个很大的数进行运算,比如38149194919814894819+89198481314819,结果很显然超出了int范围能表示的整数,我们这时候就要用到高精度算法,高精度算法通过用。原创 2024-01-02 15:40:56 · 806 阅读 · 3 评论 -
基础算法(7):离散化和区间合并
这个函数把一个序列的重复数据从小到大放在序列末尾,并返回重复数据的第一个数据的迭代器。这道题数据的值域已经达到了10^9,远远比10^5大,所以前缀和是用不了的,我们要使用离散化。如果我们想要把这些数作为数组的下标来存储的话,我们就要开辟一个很大空间的数组,但很显然,其中很多空间我们是用不到的,浪费的不是一星半点,我接受不了,题目也不会让你过。区间合并也是一种算法,主要用来合并区间,没错,就是这么简单粗暴,下面先给出模板,结合例题来领悟这种算法。原创 2024-01-01 19:12:56 · 585 阅读 · 1 评论 -
基础算法(6):前缀和
首先我们求出所有前缀和,定义s来存储所有满足条件的数组元素之和,然后我们应该先枚举长度,因为有长度为1的奇数长度的子数组,也有长度为3的,我们要一个个进行枚举,然后我们再定义起点和终点,用来求区间的部分和,判断终点是否大于数组长度,如果大于就退出本次循环,又因为当l=0时,l-1=-1超出数组下标范围,所以当l=0时直接求和即可,如果都不满足,我们就进行迭代求和,需要注意的是,我们所求的和包括下标l的元素,所以应该是sum[r]-sum[l-1],而不是sum[r]-sum[l]。原创 2023-12-21 14:11:50 · 579 阅读 · 2 评论 -
基础算法(5):滑动窗口
public:int check(char c)//每次遇到一个字符都需要进行判断,所以我们自己实现一个函数,避免重复代码return 1;return 0;int r=0;//窗口边界int cnt=0;//计数器int sum=0;//比较迭代的变量for(;r<n;r++)//开始遍历//向窗口内添加元素if(r>=k)//窗口长度大于给定值滑动直到长度等于k,减去左边元素,向右不断滑动//将sum和cnt的值进行比较,这里sum其实起到了比较作用,将cnt的值存储到sum中。原创 2023-12-19 09:04:40 · 643 阅读 · 4 评论 -
基础算法(4):排序(4)冒泡排序
i<n-1;j++)原创 2023-12-16 23:37:40 · 406 阅读 · 1 评论 -
基础算法(3):排序(3)插入排序
问题规模仍然为n,最好情况是序列是升序,这样只需要比较n-1次,最坏情况是序列是降序,需要比较n(n-1)次,所以时间复杂度为O(n^2)(3)如果扫描到某个元素大于取出的新元素,将该元素移到下一个位置。(4)重复(3),直到找到已排序的元素小于或者等于新元素的位置。(2)取出下一个元素,在已经排序的序列中从后向前扫描。(1)从第一个元素出现,该元素认为已经被排好序。(5)将新元素插入到该位置后面。插入排序的工作原理是。(6)重复(2)-(5)原创 2023-12-15 13:01:59 · 551 阅读 · 2 评论 -
基础算法(2):排序(2):计数排序
计数排序是一个非基于比较的稳定的线性时间的排序算法,而选择排序是基于比较的,计数排序不用,它的实现依靠计数。很显然,问题规模为n,只进行了一次循环,没有进行比较,为n次,时间复杂度为O(n),这是很可观的。其实就是做了个映射处理,这个思想和哈希表很像,以后会讲到。原创 2023-12-14 20:53:01 · 174 阅读 · 2 评论 -
基础算法(1):排序(1):选择排序
今天对算法产生了兴趣,开始学习基础算法,比如排序,模拟,贪心,递推等内容,算法是很重要的,它是解决某个问题的特定方法,程序=数据结构+算法,所以对算法的学习是至关重要的,它可以提高程序效率,不同的算法也是有优劣的,如何进行评价,这也是我们需要知道的,我会在学习中穿插这种评价方法,下面让我们看看第一个基础算法排序中的选择排序。原创 2023-12-13 22:34:01 · 348 阅读 · 1 评论