自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 数据结构之单链表

我们的代码,首先是赋值很简单就是e[idx]=x,赋值之后我们要把当前的节点指向的位置改变,原来是head,现在就要把下一个指向的改掉,就是ne[idx]=head,就相当于把头节点给改了,最后我们的索引也要指向下一个位置,就是head=idx++,把头节点往后挪一个位置。head 就是一个头节点,开始的节点,它没有值,我们用-1来代替,idx我理解为当前使用节点的位置,相当于一个索引,我们刚开始要初始化构造链表就是init,如何在头节点后插入一个节点呢,

2024-01-24 18:44:06 609 2

原创 基础算法之离散化

离散化:就是把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。例如{40000,4532,48,5,1}数字分布很稀疏,如果按照大小进行排序{5,4,3,2,1},如果只处理数字的位置,那么后者更容易。第二步的步骤其实就是把排序后的数字从1开始分配数值,从而完成离散化。完成离散化我们有两种形式可以完成,一种是手写,一种是用stl函数。1.排序,2.离散化,3.归位。这里的代码有一些不完整的地方。

2024-01-23 22:49:54 531 1

原创 基础算法之前缀和与差分

二维的前缀和和一维是一样的,我们作推导,看答案代码,s[i][j] = s[i][j - 1] + s[i - 1][j] - s[i - 1][j - 1] + a[i][j];我们只要和一维一样,画一个图,把子矩阵都减去,然后把多减去的再加上,就能得到。我们本文主要看差分,差分和前缀和都是一样的,为了提高算法的效率;差分也有二维和一维,我们只要理解其中的推导过程即可,最后把答案记住。差分其实就是一个打补丁的过程,我们把一定区间内的数组都加上一定的数。看一道例题输入一个长度为 n 的整数序列。

2024-01-22 21:17:25 350

原创 基础算法之前缀和与差分

我们先了解一下什么是前缀和,前缀和顾名思义,就是把一定区间内的数加起来如何输出,我们假定有一串数组,我们把这个数组内一定区间内的数加起来那么就是前缀和,它能够提高我们在计算中的效率。我们只要了解前缀和的算法,然后模拟一下该题的过程,就能轻易算出答案,当然前缀和其还有二维的,差分就是前缀和的逆运算。所以我们最后的答案就是s[i] = s[i - 1] + a[i];我们要求一个区间内的和,先看答案代码s[i] = s[i - 1] + a[i];所以他的前一项s[i-1]=a[1]+···+a[I-1];

2024-01-20 21:22:37 293

原创 基础算法之高精度

这个时候我们先想办法,如何把两个数字读写进来,这个时候我们想到了字符串,把这个数当作字符,这样无论它多大我们都能够处理。读入这两个数字之后我们就要把它用数组存储起来,到时候相加的时候我们只要把每个数组上对应的数字相加,如何再处理进位就可以;同理,我们如果解决了加法,那么剩下的我们都可以使用这种进位的思想进行解决;我们的计算机在处理一些大数据的问题时,有的数据会超出其定义的类型,最大的就是long。long类型,如果数据过大,导致我们的计算机无法计算,那我们这时候就采取高精度算法;然后我们再写相加的代码。

2024-01-19 20:44:01 326 1

原创 基础算法-二分法

在这个题目中我们还需要把两边位置输出,所有就要用a[l]和k进行比较,所以我们后面还有一串代码就是将右边也进行一次二分查找;关键就在于a[mid]>=k,如果大于等于那么这个k一定在mid的左边,那么左边(l)不变,改变右边。在查找右边代码的时候我们需要注意l+r+1;mid = (l+r)/2 适用于l>=0,r>=0;mid =left+(right-left)/2,适用于l-r无溢出。mid = (l+r)>>1适用于l+r无溢出。则r=mid,反之就是l=mid+1。综合来说(l+r)>>1更好。

2024-01-17 20:11:10 342

原创 基础算法之排序

在我们学习了快速排序代码之后,我们可以更轻易的理解归并排序的理解与实现。归并排序其实就是建立在快速排序的基础之上,只不过多了一个步骤,就是将两个子序列合并成一个序列的步骤。在归并排序之中我们需要一个中间值,作为两个子序列的划分,划分之后我们再将两个子序列排好序然后合并。和快速排序一样,先划分子问题,在解决子问题,在合并子问题。我们设置了一个数组temp进行临时的存储,以方便我们最后输出的数据能够是有序的。最后再将可能存在的剩下的一个小数组的尾部直接添加到 tmp 数组中。之后进行归并排序函数的编写;

2024-01-17 17:20:59 528

原创 基础算法之排序

l,r里面的元素就是我们进行快排的元素,之后将这个序列分成子问题,既然要分成子问题,我们就要对这个序列做出两边的边界,这里我们可以假设一个变量i,一个变量j,我们从中选取一个基准元素,假设该基准元素为中间的那个元素也就是2。快速排序在每一轮挑选一个基准元素(哨兵),并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成了两个部分。也就是一个分治算法,在代码实现我们主要考虑三步,分成子问题,递归处理子问题,再将子问题合并。但是在递归的时候我们要注意一个边界的问题。

2024-01-16 22:29:54 307

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除