自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 2021-08-17

2021/8/17打卡算法前缀和&差分前缀和前缀和是一种重要的预处理,能大大降低查询的时间复杂度。可以简单理解为“数列的前 n 项的和”。C++ 标准库中实现了前缀和函数 partial_sum,定义于头文件 中。例题有 N 个的正整数放到数组 A 里,现在要求一个新的数组B ,新数组的第 i 个数 B[i] 是原数组 A 第 0到第 i 个数的和。输入:51 2 3 4 5输出:1 3 6 10 15解题思路递推:B[0] = A[0],对于 i>=1

2021-08-17 21:50:52 202

转载 2021-08-15

2021/8/15打卡排序【希尔排序】希尔排序(英语:Shell sort),也称为缩小增量排序法,是 插入排序 的一种改进版本。希尔排序以它的发明者希尔(英语:Donald Shell)命名。工作原理排序对不相邻的记录进行比较和移动:将待排序序列分为若干子序列(每个子序列的元素在原始数组中间距相同);对这些子序列进行插入排序;减小每个子序列中元素之间的间距,重复上述过程直至间距减少为 1。性质希尔排序是一种不稳定的排序算法。代码实现...

2021-08-16 20:34:19 122

转载 2021-08-14

2021/8/14打卡算法排序【桶排序】桶排序(英文:Bucket sort)是排序算法的一种,适用于待排序数据值域较大但分布比较均匀的情况。工作原理桶排序按下列步骤进行:设置一个定量的数组当作空桶;遍历序列,并将元素一个个放到对应的桶中;对每个不是空的桶进行排序;从不是空的桶里把元素再放回原来的序列中。性质如果使用稳定的内层排序,并且将元素插入桶中时不改变元素间的相对顺序,那么桶排序就是一种稳定的排序算法。由于每块元素不多,一般使用插入排序。此时桶排序是一种稳定的排序算法。算法实

2021-08-14 20:08:19 97

转载 2021-08-13

2021/8/13打卡算法【堆排序】堆排序(英语:Heapsort)是指利用 二叉堆 这种数据结构所设计的一种排序算法。堆排序的适用数据结构为数组。工作原理本质是建立在堆上的选择排序。首先建立大顶堆,然后将堆顶的元素取出,作为最大值,与数组尾部的元素交换,并维持残余堆的性质;之后将堆顶的元素取出,作为次大值,与数组倒数第二位元素交换,并维持残余堆的性质;以此类推,在第 n-1 次操作后,整个数组就完成了排序。在数组上建立二叉堆从根节点开始,依次将每一层的节点排列在数组里。于是有数组中下标为

2021-08-13 20:03:14 168

转载 2021-08-12

2021/8/12打卡算法排序【归并排序】归并排序(英语:merge sort)是一种采用了 分治 思想的排序算法。工作原理归并排序分为三个步骤:将数列划分为两部分;递归地分别对两个子序列进行归并排序;合并两个子序列。不难发现,归并排序的前两步都很好实现,关键是如何合并两个子序列。注意到两个子序列在第二步中已经保证了都是有序的了,第三步中实际上是想要把两个 有序 的序列合并起来。性质归并排序是一种稳定的排序。归并排序的最优时间复杂度,平均时间复杂度和最坏时间复杂度均为O(n log

2021-08-12 20:53:32 76

转载 2021-08-11

2021/8/11打卡算法排序【快速排序】学习资料转自快速排序(英语:Quicksort),又称分区交换排序(英语:partition-exchange sort),简称快排,是一种被广泛运用的排序算法。原理快速排序的工作原理是通过 分治 的方式来将一个数组排序。快速排序分为三个过程:将数列划分为两部分(要求保证相对大小关系);递归到两个子序列中分别进行快速排序;不用合并,因为此时数列已经完全有序。和归并排序不同,第一步并不是直接分成前后两个序列,而是在分的过程中要保证相对大小关系。具

2021-08-11 21:18:30 189

转载 2021-08-10

2021/8/10打卡算法排序【基数排序】学习资料转自基数排序(英语:Radix sort)是一种非比较型的排序算法,最早用于解决卡片排序的问题。它的工作原理是将待排序的元素拆分为 k 个关键字(比较两个元素时,先比较第一关键字,如果相同再比较第二关键字……),然后先对第 k 关键字进行稳定排序,再对第 k-1 关键字进行稳定排序,再对第 k-2 关键字进行稳定排序……最后对第一关键字进行稳定排序,这样就完成了对整个待排序序列的稳定排序。基数排序需要借助一种 稳定算法 完成内层对关键字的排序。通

2021-08-10 19:54:01 78

转载 2021-08-08

2021/8/8打卡算法排序【插入排序】学习资料来源插入排序(英语:Insertion sort)是一种简单直观的排序算法。它的工作原理为将待排列元素划分为“已排序”和“未排序”两部分,每次从“未排序的”元素中选择一个插入到“已排序的”元素中的正确位置。一个与插入排序相同的操作是打扑克牌时,从牌桌上抓一张牌,按牌面大小插到手牌后,再抓下一张牌。稳定性插入排序是一种稳定的排序算法。代码实现void charusort(int* a, int n){ for (int i = 1; i &lt

2021-08-08 18:20:03 78

转载 2021-08-07

2021/8/7算法打卡排序【冒泡排序】学习资料来源冒泡排序(英语:Bubble sort)是一种简单的排序算法。由于在算法的执行过程中,较小的元素像是气泡般慢慢「浮」到数列的顶端,故叫做冒泡排序。原理它的工作原理是每次检查相邻两个元素,如果前面的元素与后面的元素满足给定的排序条件,就将相邻两个元素交换。当没有相邻的元素需要交换时,排序就完成了。经过 i 次扫描后,数列的末尾 i 项必然是最大的 i 项,因此冒泡排序最多需要扫描 n-1 遍数组就能完成排序。稳定性冒泡排序是一种稳定的排序算法。

2021-08-07 17:59:02 64

转载 2021-08-06

2021/8/6打卡算法排序【选择排序】学习资料来源选择排序(英语:Selection sort)是排序算法的一种,它的工作原理是每次找出第 i 小的元素(也就是 Ai…n 中最小的元素),然后将这个元素与数组第 i 个位置上的元素交换。稳定性由于 swap(交换两个元素)操作的存在,选择排序是一种不稳定的排序算法。代码实现void selection_sort(int* a, int n) { for (int i = 0; i < n-1; ++i) { int ith

2021-08-06 17:34:17 67

转载 2021-08-05

2021/8/5打卡算法贪心资料来源贪心算法(英语:greedy algorithm),是用计算机来模拟一个“贪心”的人做出决策的过程。这个人十分贪婪,每一步行动总是按某种指标选取最优的操作。而且他目光短浅,总是只看眼前,并不考虑以后可能造成的影响。可想而知,并不是所有的时候贪心法都能获得最优解,所以一般使用贪心法的时候,都要确保自己能证明其正确性。适用范围贪心算法在有最优子结构的问题中尤为有效。最优子结构的意思是问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最优解。证明方法贪心

2021-08-05 20:25:59 85

转载 2021-08-04

2021/8/4打卡算法递归&分治简介递归(英语:Recursion),在数学和计算机科学中是指在函数的定义中使用函数自身的方法,在计算机科学中还额外指一种通过重复将问题分解为同类的子问题而解决问题的方法。分治(英语:Divide and Conquer),字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。递归的缺点在程序执行中,递归是利用堆栈来实现的。每当进入一个函数调用,栈就会增加一层栈帧

2021-08-04 20:03:32 74

原创 2021-08-03

2021/8/3打卡算法模拟例题原题一只一英寸的蠕虫位于 x英寸深的井的底部。它每分钟向上爬y 英寸,但是必须休息一分钟才能再次向上爬。在休息的时候,它滑落了 z 英寸。之后它将重复向上爬和休息的过程。蠕虫爬出井口花费了多长时间?我们将不足一分钟的部分算作一整分钟。如果蠕虫爬完后刚好到达井的顶部,我们也设作蠕虫已经爬出井口。解题思路直接使用程序模拟蠕虫爬井的过程就可以了。用一个循环重复蠕虫的爬井过程,当攀爬的长度超过或者等于井的深度时跳出。注意上爬和下滑时都要递增时间。解题代码#include

2021-08-03 18:35:08 160

原创 2021-08-02

学习2021/8/2算法枚举例题一个数组中的数互不相同,求其中和为 的数对的个数。解题思路for(int i=0;i<n;i++) for(int j=0;j<n;j++) { if(a[i]+a[j]==0) sum++; }优化由于题中没要求数对是有序的,答案就是有序的情况的两倍(考虑如果 (a, b) 是答案,那么 (b, a) 也是答案)。对于这种情况,只需统计人为要求有顺序之后的答案,最后再乘上 2 就好了。不妨要求第一个数要出现在靠前的位置。代

2021-08-02 18:05:54 292

空空如也

空空如也

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

TA关注的人

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