![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习 随笔
Jccober
这个作者很懒,什么都没留下…
展开
-
codeup 求最长公共子串(字符串hash思想)
问题 A: 求最长公共子串(串)[命题人 : 外部导入]时间限制 : 1.000 sec 内存限制 : 128 MB题目描述求采用顺序结构存储的串s和串t的一个最长公共子串,若没有则输出false,若最长的有多个则输出最先出现的那一串。输入输入两个字符串输出输出公共子串样例输入 Copyabcdefadbcef样例输出 Copybc原题地址#include <iostream>#include <vector>#include <algori原创 2021-08-26 15:35:52 · 204 阅读 · 0 评论 -
刷题踩坑之K好数字
蓝桥杯练习系统K好数试题 算法训练 K好数资源限制时间限制:1.0s 内存限制:256.0MB问题描述如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大,请你输出它对1000000007取模后的值。输入格式输入包含两个正整数,K和L。输出格式输出一个整数,表示答案对1000000007取模后的值。样例输原创 2020-10-18 10:58:12 · 140 阅读 · 0 评论 -
关于出栈序列合法性的题目理解
问题描述X星球特别讲究秩序,所有道路都是单行线。一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行。路边有个死胡同,只能容一辆车通过,是临时的检查站,如图所示。在这里插入图片描述X星球太死板,要求每辆路过的车必须进入检查站,也可能不检查就放行,也可能仔细检查。如果车辆进入检查站和离开的次序可以任意交错。那么,该车队再次上路后,可能的次序有多少种?为了方便起见,假设检查站可容纳任意数量的汽车。显然,如果车队只有1辆车,可能次序1种;2辆车可能次序2种;3辆车可能次序5种。原创 2020-10-15 16:32:59 · 309 阅读 · 0 评论 -
Codeup日期处理
日期处理:1.计算两个日期的差值:已知给定了两个日期格式是:yyyy-mmmm-dddd,求两个日期的差值思路:(1)可以用循环从小的日期加到大的日期看一共加了多少次,次数就是像个的天数,(2),可以用分而治之的想法,先将小的年份这年每月每月的加日子,如果是闰年而且月份大于2就多家一天,然后直接加一年的天数直到大年份的前一年,然后把大年份每月每月的日子加起来,2.计算日期是星期几:给定一个日子 yyyy-mmmm-dddd,要求得到这天是星期几:现在这里夸一下基姆拉尔森公式,这个公式就是专原创 2020-10-05 21:03:13 · 129 阅读 · 0 评论 -
C++ 算法常用小工具之 Pair
Pair 概述:pair 就是类似一个小结构体,他将两个元素捆绑在一起成为一个元素,经常用于两个变量 有一定 bond 的情况,例如:x,y坐标;姓名和成绩;性别和身高等等;pair 的声明初始化以及调用:pair的声明 需要添加utility头文件,记不住的话也可以用map头文件pair有两个参数,first 和second 可以是基本的数据类型也可以是容器pair 可以直接用比较运算符比较大小,两个pair 首先比较first的大小,first相等后然后在比较second 的大小#in原创 2020-09-09 14:34:15 · 1174 阅读 · 0 评论 -
c++ 数据结构queue应用学习随笔
队列概述:队列是一个先进先出的数据结构,类似食堂打饭排队,需要一个队首指针front指向队列手元素的前一位,一个队末指针rear指向最后一个元素。和栈类似,用数组实现队列时front 和rear 都是int 型的,用链表实现队列时则为int * 型的指针。下面学习对列的常用操作:清空(clear) ,判断元素个数(size), 清空(empty),入队(push) ,出对(pop),取出首元素(get_front),取出尾元素(get_rear);常用操作:void clear(){ fr原创 2020-08-23 22:02:40 · 88 阅读 · 0 评论 -
C++ map STL映射 简单学习
map 概述:map是一种映射,例如存储int类型数据的数组就是int 类型的下标对值int 的映射,字符数组就是int(称之为键) 对 char 的映射,但是STL 中的map 使得映射的 键 多样化,可以使字符串,浮点型,字符型,string ,等STL 容器 都可以成为map 的键。map 的声明和访问:这里定义了一个string 对 int 的映射,并通过类似数组的下标访问方式,注意键是唯一的,相同的键赋值会导致数据覆盖。#include <iostream>#inclu原创 2020-08-20 14:06:50 · 222 阅读 · 0 评论 -
c++ stl string概述和常用函数详析
string 概述:string 的定义#include<iostream>#include <string>using namespace std;int main(){ string str="abc123"}string 的访问:#include <iostream>#include <string>using namespace std;int main(){ string str="123456"; f原创 2020-08-20 10:53:40 · 129 阅读 · 0 评论 -
c++ STL set容器的常见用法和解析
set 的概述set和迭代器的定义:set<typename> name;//typename 可以是数据类型,也可以是STl容器(注意后面两个大于号之间有空格)set<int > st;set<int>::iterator it;//可以通过*it来访问set中的元素了set 常用函数:insert(x) 将x插入到set容器中,并且自动递增排序和去重,时间复杂度为O(logN)N为set容器内元素的个数 ,#include <std原创 2020-08-18 17:26:53 · 154 阅读 · 0 评论 -
C++标准模板库-----vector
vector 概述:vector可以理解为不定长数组,vector 数组的定义:需要加上vector头文件# include <vector>//vector<typename> arryname;vector <int > myArray;vector<node> myArray2; //node 是结构体;vector<double> myArray3;vector<vector<int> > ar原创 2020-08-16 19:26:24 · 111 阅读 · 1 评论 -
组合数计算学习 随笔
组合数的计算:1.一个求n!含有质因子k个数的问题:直接计算法:int myfun(int n,int k){ int count=0; for(int i=2;i<=n;i++) { int temp=i; while(temp%k==0) { count++; temp/=k; } } return count;}公式法:(找规律)这个方法也可以计算n!末尾有多少个0,cal(n,5) ,因子10的个数等于因子5的个数这种方法也可以用原创 2020-08-16 10:22:06 · 102 阅读 · 0 评论 -
算法笔记 随笔 大整数运算
大整数四则运算的基本概念例如计算A+B ,可能很块就计出了答案,但是对于有1000位的A,B该怎么计算呢,则以吧A,B的每一位数字存储在数组中,然后根据实际中两个数字的相加计算方式进行模拟,实际上并不是很复杂:大整数的存储:用字符串读入一串数字,数字的高位在字符数组的低位,现在要把每一位数字存在一个int 型数组里,低位再低,高位在高#include <stdio.h>#include <math.h>#include <string.h> #inclu原创 2020-08-13 10:03:55 · 133 阅读 · 0 评论 -
算法笔记 ----素数 1. 素数的快速判断 2.快速打印素数表
素数的判断:首先理解素数的概念:素数就是除了1和它本身除以任何小于它的数都不会整除的数字,如果可以整除那这个数就是合数,注意: 1既不是素数也不是合数bool isPrime(int a){ if(a<=1) return false; int fin=sqrt(a); for(int i=2;i<=fin;i++) { if(a%i==0) return false; } return true;}打印素数表:一般方法:枚举时间复杂度为O(n^3/2),判原创 2020-08-10 16:16:07 · 144 阅读 · 0 评论 -
算法笔记随笔:分数的化简,四则运算和输出
#include <stdio.h>#include <math.h>struct Fraction{ int up,down;};int gcd(int a,int b){ return !b?a:gcd(b,a%b);}Fraction myFun(Fraction result)// 分数的化简规范函数 { if(result.down<0) // 负分数 { result.down=-down; result.up=-up; }原创 2020-08-10 14:41:26 · 196 阅读 · 0 评论 -
codeup 100000589 Least Common Multiple 最大公约数和最小公倍数
求最大公约数和最小公倍数:最大公约数可以利用欧几里得算法(辗转相除法):gcd(a,b) =gcd(b,a%b)这是一个递归条件,现在需要确定递归边界,我们知道0与任何数的大公约数就是这个数本身,所以递归边界就是当b为0时返回a的值,这样gcd函数有两种写法://第一种写法int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b);}//第二种写法int gcd(int a,int b){ return !b?a:原创 2020-08-10 10:08:01 · 188 阅读 · 0 评论 -
算法笔记 ---------其他高效算法和技巧学习 随笔
其他高效算法和技巧学习打表:打表就是事先将多种可能的结果预先存储起来,例如找到Q个斐波那契数列的结果,如果计算的话需要执行Q次程序,时间复杂度是O(Q*n),但如果预先将结果存储到数组中,当需要输出结果的时候去数组中找到对应,这样时间复杂度为O(Q+n);活用递推:有些题目直接暴力可能会超时,所以要看测试的数据中是否存在规律,这个规律可能会大大减少程序的时间复杂度,PAT 1040 有几个PAT 就是计算每一位A 之前的P有多少乘以A之后有多少T,来得到最终结果的。随机选择算法:在序列中输原创 2020-08-08 10:58:43 · 93 阅读 · 0 评论 -
twoPointers 算法思想学习 随笔 排序算法之----------快速排序
twopointers 概述twopointer 是一种算法思想,目的是为了降低时间复杂度,特别是在比较序列中具有某个特性的元素时需要遍历整个序列导致复杂度巨大的情况,利用i与 j 对序列进行(反向,同向扫描)从而降低时间复杂的的思想。下面给出一个经典的问题:从一个序列中找出符合 a[i]+a[j]=m 的 i 和 j;一般思路是用两个循环嵌套 ,遍力序列找出符合条件的情框,但是这样时间复杂度为 O(n^2)当n 大于10的5次方时就无法承受了,int i=0,j=n-1;原创 2020-08-07 17:57:19 · 182 阅读 · 0 评论 -
算法笔记 -- 二分查找算法随笔
二分查找二分查找的概念:在查找元素比较少的时候(小于 10^5)时直接用循环进行比较是非常直接且朴素的,但当查找元素大于10的5次方的时候就显得十分吃力,二分查找是在数列有序的基础上进行的,每次用序列中间位置的数字与查找的数字比较。以递增数列为例,mid>n则缩小右边界right=mid-1, mid<n 则缩小左边界 left=mid+1;(递减数列处理方式相反)递减数列的二分查找:查找满足条件的指定元素#include <iostream>#include <原创 2020-08-05 16:33:53 · 120 阅读 · 0 评论