
算法笔记
学习算法过程中的总结,持续更新中......
赶不上明天
要跑起来啊!
展开
-
【C++】趁室友玩游戏的时候来学一学Vector吧:浅谈Vector
在使用vector之前需要在代码头部添加#include<vector>单独定义一个vector:vector<typename> name;这里的typename可以是任何基本类型,例如int、double、char、结构体等,也可以是vector、set、queue等STL标准容器,不过注意一个细节,在定义typename为STL容器时,要在>>中间加上空格,因为C++11之前会把它视为位移操作原创 2021-12-19 22:40:00 · 2920 阅读 · 0 评论 -
【C++】简单数学问题:分数的四则运算
在数学问题中,我们会经常遇到分数。当然我们可以很轻松的使用两个数相除的形式来表达分数,但是如何进行分数的化简以及四则运算呢?原创 2021-12-07 23:34:53 · 1481 阅读 · 0 评论 -
【C++】常见数学问题:数字黑洞 & 求最大公约数 & 求最小公倍数
在一些考试或竞赛中,常常涉及到一些数学问题,需要利用一些数理逻辑来解决具体的问题,下面一起来看一下都有哪些常见问题吧。原创 2021-12-06 22:58:51 · 381 阅读 · 0 评论 -
【C++】快速排序(附详细注释) 选取序列内一随机元素作为主元
快速排序的主要原理是选取序列内一元素存入变量当中,这个元素称为主元,将比此主元大的放到变量右边,将小于等于主元的元素放在主元左边,然后对以主元划分开的左右两个区间依次进行上述操作。原创 2021-11-26 21:10:39 · 1011 阅读 · 0 评论 -
【C++】归并排序
归并排序前言 归并排序主要利用了“归并”思想,对序列进行排序。归并排序的原理是:将序列两两分组,将序列归并为[n / 2]个组,组内单独排序。然后将这些组再两两归并,生成[n / 4]个组,组内再单独排序,以此类推,直到只剩下一个组为止。另外,归并排序的时间复杂度为:O(n logn) 。下面来看看归并排序的两种简单实现。递归实现 反复将当前区间分为两半,对两个子区间分别递归进行归并排序,最后将两子区间合并为一有序序列即可。#include<iostream>using na原创 2021-11-21 19:30:22 · 1118 阅读 · 0 评论 -
【C++】二分 二分查找 & 计算根号2的近似值 & 快速幂
二分前言 二分思想在我看来是将一个大的整体分成两个小的整体,在经过判断后,舍弃一个不合适的小整体,再将剩下的一个小整体一分为二,依此往复,直到找到不能再一分为二的个体。二分思想可以提高我们在做一些查找工作时的效率。二分查找下面来看一下怎样利用二分思想进行查找。Q:在一个严格递增数列中找到一个给定的数,并返回这个数在数组中对应的下标#include<iostream>using namespace std;//二分//二分查找//A[]为严格递增序列,left为二分下界,r原创 2021-11-12 20:37:09 · 2410 阅读 · 0 评论 -
【C++】贪心 [PAT B1020]月饼&[PAT B1023]组个最小数&区间贪心
贪心前言 生活中总会遇见一些需要最优或者较优方案的事情,而这时候往往可以使用贪心法来解决这类问题。贪心法是求解一类最优化问题的方法,它总是考虑当前状态下的局部最优(或较优)的策略,来使全局结果达到最优(或较优)。 下面来看一下如何使用贪心法解决问题:实例[PAT B1020]月饼月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是原创 2021-11-06 15:32:30 · 127 阅读 · 0 评论 -
【C++】递归 求n的阶乘 & 斐波那契数列第n项 & 1~n全排列
递归 求n的阶乘 & 斐波那契数列第n项 & 全排列前言什么是递归?递归在于反复调用自身函数,但是每次把问题范围缩小,直到缩小到可以直接得到边界数据的结果,然后再在返回的路上求出对应的解。递归的两个重要概念:递归边界 递归式 。其中递归式式将原问题分解为若干个子问题的手段,而递归边界则是分解的尽头。例题下面看几个关于递归的经典题目求n!#include<iostream>using namespace std;//求n的阶乘 int Func(int原创 2021-11-03 22:46:34 · 818 阅读 · 0 评论 -
【C++】整数散列&字符串散列
整数散列&字符串散列前言什么是散列?用一句话概括就是 散列:将元素通过一个函数转换为整数,使得该整数可以尽量唯一地代表这个元素 。其中把这个函数称为散列函数H,如果元素在转换前为key,转换后就是H(key)。本文将通过代码及注释展示简单的整数散列和字符串散列。整数散列#include<iostream>using namespace std;//整数散列 //求M个欲查询的整数中每个数在N个数中出现的次数 //时间复杂度O(N + M)const int K =原创 2021-11-02 23:38:25 · 675 阅读 · 0 评论 -
【C++】sort()函数 总结
sort() 总结前言sort()函数默认由大到小排序,需要加上头文件 #include< algorithm >sort(首元素地址(必填),尾元素地址的下一个地址(必填),比较函数)常见用法总结如下:#include<iostream>#include<algorithm> using namespace std;//sort()方法 bool cmp(int a, int b){//比较函数 return a > b;} int原创 2021-11-02 00:27:23 · 280 阅读 · 0 评论 -
【C++】直接插入排序
直接插入排序前言直接插入排序主要在于将未排序的数插入已经排序的排序的部分后仍然保持有序,具体做法一般是从后往前枚举已有序部分来确定插入位置排序算法void insertSort(int a[], int n){ for(int i = 1; i < n; i++){ //进行n-1趟排序 int temp = a[i],j = i; //temp临时存放a[i],j从i开始往前枚举 while(j > 0 && temp < a[j - 1]){ //原创 2021-11-01 11:20:37 · 189 阅读 · 0 评论 -
【C++】简单选择排序
简单选择排序选择排序void selectSort(int a[], int n){ for(int i = 0; i <= n; i++){//循环n趟 int k = i; for(int j = i; j <= n; j++){//选出i~n最小的元素 if(a[j] < a[k]){ k = j; } } int temp = a[i];//交换数值 a[i] = a[k]; a[k] = temp; }}完整代码原创 2021-10-31 23:14:55 · 105 阅读 · 0 评论 -
【C++】冒泡排序
冒泡排序先学会交换两个数int a = 1 ,b = 2;int temp = a;a = b;b = temp;冒泡排序#include<iostream>using namespace std;//冒泡排序 int main(){ int a[10] = {3, 1, 2, 5, 4}; for(int i = 1; i <=4; i++){ //n-1次循环 for(int j = 0;j <5-i; j++){//第i趟时从a[0]到a[n原创 2021-10-31 22:02:58 · 151 阅读 · 0 评论