自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 尺取法算法

尺取法(又称滑动窗口法、双指针法)是一种在数组或字符串中高效查找满足特定条件的子数组或子字符串的算法。它的基本思想是通过两个指针(通常称为左指针和右指针)来维护一个窗口,通过移动这两个指针来调整窗口的大小和位置,从而找到满足条件的子数组或子字符串。

2024-11-13 20:14:18 424

原创 最大公约数(辗转相除/更相减损术)

当a和b均为偶数时:gcd(a,b)=2*gcd(a/2,b/2)=2*gcd(a>>1,b>>1)当a和b均为奇数时,先利用更相减损法运算一次,此时a-b必然是偶数,然后又可以继续进行位移运算。当a为偶数,b为奇数时:gcd(a,b)=gcd(a/2,b)=gcd(a>>1,b)当a为奇数,b为偶数时:gcd(a,b)=gcd(a,b/2)=gcd(a,b>>1)计算 48÷18,得到余数 48=18×2+12(余数为 12)计算 18÷12,得到 18=12×1+6(余数为 6)

2024-10-27 20:48:49 1005

原创 stl-map

STL提供了一个非常有用的数据结构叫做map,它是一个关联容器,。

2024-10-23 22:38:08 1812

原创 sort排序

sort是c++标准库中提供的排序算法,即快速排序。

2024-10-20 19:27:18 439

原创 (STL)容器

list是一个双向带头循环链表,允许在常数范围内的任意位置进行插入和删除,然而缺陷也和链表一样,不支持访问下标。

2024-10-19 20:05:00 1216

原创 快速幂算法

(n是正整数),只需要将a*a*a*a......*a,但它的时间复杂度为O(n)。很容易计算,所以只需要将它们相乘就可以,但具体是如何实现的。,105=1+8+32+64,所以可以写成。有什么办法可以快速解决这个问题,比如说。这个算法的本质是倍增原理。

2024-10-16 19:21:19 598

原创 (递归)算法

1.终止条件,当满足这个条件时,递归将停止并返回一个值,这个条件是为了防止函数无限递归,导致栈溢出。2.递归条件,这个是函数调用自身的地方,通常是通过将问题分解为更小的子问题来解决。例如求n的阶乘:当我们做题时,面对递归问题,应当分析递归,这时需用到递归树原式中为2T(n/2),所以分为俩节点计算树每层的复杂度,将所有层的复杂度相加得到最终的复杂度。自然递归结构的问题:递归定义清晰的问题:递归生成特性的问题:性能敏感问题:迭代更适合的问题:状态管理复杂的问题:

2024-10-14 18:20:37 545

原创 素数筛法算法

这段带代码为了找出2--N以内的素数,所以在函数isprime函数内进行筛选,通过素数定义很容易理解这串代码,但是在时间上的优化还远远不够。一个合数,一定存在非1非本身质因子,意思就是,例如合数4,它一定是2*2,当我们得到2时,把2的倍数都筛掉,留下来的就是素数。原理:欧拉筛法的核心思想是通过排除法,逐一标记合数,同时确保每个合数只被其最小的质因数标记一次。优化一下,将这个数开一下平方,缩小一下范围,虽然提高了运行速度,但还远远不够。这里就已经构成了筛法,但是思考一下可以发现,代码中可以不需要素数判断。

2024-10-10 19:25:33 363

原创 GCD和LCM

即GCD不依赖于输入的符号。,即LCM不依赖于输入的符号。,它们的最大公约数是唯一的。的公约数中最大的一个,即。,它们的最小公倍数是唯一的。的公倍数中最小的一个,即。:GCD 总是非负的,即。:LCM 总是非负的,即。:对于任意两个非零整数。:对于任意两个非零整数。

2024-10-09 10:39:26 939

原创 二分查找算法

此查找是在有序数组中查找某一特定元素的查找算法。查找过程从数组的中间元素开始,如果中间元素是要查找的元素,则结束。如果要查找的数大于或小于中间元素,则在大于或小于的那一半查找,而且和开始一样从中间元素开始比较,如果在某一步骤数组为空,则代表找不到。时间复杂度:O(logn)leftghtarr[mid]midarr[mid]arr[mid]

2024-10-04 19:28:02 404

原创 快速排序算法

快速排序,是一种高效的排序算法,采用分治法策略,将数组分成两个子数组,分别对其进行排序。它的平均时间复杂度是 O(nlog⁡n),而最坏情况下为 O(),但通过优化,可以将最坏情况的发生概率降到最低。

2024-10-03 21:31:10 371

原创 堆排序算法

构建最大堆:将无序数组构建成最大堆(或最小堆)。最大堆的性质是父节点的值大于或等于其子节点的值,最小堆反之。从数组的中间开始,逐步向上调整(heapify),确保每个子树都满足堆的性质。排序过程:将堆的根节点(最大值或最小值)与堆的最后一个元素交换。缩小堆的范围(排除最后一个元素),并对新的根节点进行堆化(heapify),以维持堆的性质。重复上述步骤,直到堆的大小减为1,排序完成。

2024-10-02 22:08:54 245 2

空空如也

空空如也

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

TA关注的人

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