算法学习及算法实现
Mikchy
一名在校学生,喜爱编程,希望自己的理解可以帮助到其他人,同时也希望可以结交到朋友
展开
-
最小公倍数和最大公约数的求法——最快的:辗转相除法
首先,先求最大公约数,利用的方法是辗转相除法辗转相除法的基本原理如果用C语言来实现,实现代码如下:循环语句实现long long int maxDivisor(long long int a,long long int b) //求最大公约数{ long long int i,c; if(a<b) //保证最大的数是a,因为是大数除小数 { c = a...原创 2017-12-20 15:39:23 · 3700 阅读 · 0 评论 -
【算法,数学知识】曼哈顿距离
关于曼哈顿距离,假设有两个点那么曼哈顿距离就是:这个曼哈顿距离是一个交叉信息项,也就是知道一个点,是无法求出这个值的。也就是需要 O(N ^ 2)。那么如何降低求的时间复杂度呢,曼哈顿距离有一个转换形式:Proof:所以,我们要求 N 个点的最大曼哈顿距离,那么就是求所有的四种情况中,每种情况的最大差(也就是每种情况求其最大值和最小值,作差),这样子,时...原创 2020-01-27 00:06:15 · 1873 阅读 · 1 评论 -
求一个数组里的数的所有组合和全排列(Java)
题目:把一个数组里的数的组合全部列出,比如1和2列来为1,2,12,21.分析:这道题有多种扩展1,没有重复元素的数的组合2,有重复元素的数的组合3,没有重复元素的数的全排列4,有重复元素的数的全排列1,没有重复元素的数的组合第一种情况下,没有重复元素的数的组合,利用DFS直接求,因为没有重复元素,所以不会出现一样的,将数组元素存在LinkedList里(方便删...原创 2019-06-10 16:46:12 · 14804 阅读 · 1 评论 -
C++关于double,float的用scanf和printf的输入输出问题
在C++中,有输入时:double t1;scanf("%lf",&t1);float t2;scanf("%f",&t2);我们发现,double的输入是 %lf float的输入是 %f输出时,无论double还是float都是 %f 输出,如果double的用 %lf输出会为0.0000printf("%f",t1);p...原创 2018-09-10 22:40:46 · 18897 阅读 · 2 评论 -
C++常见问题: 字符串分割函数 split(自己编写)
C++标准库里面没有字符分割函数split ,这可太不方便了,我已经遇到>3次如何对字符串快速分割这个问题了。列几个常用方法以备不时之需。 方法一: 利用STL自己实现split 函数(常用,简单,直观)原型: vector<string> split(const string &s, const string &seperator);输入一个字符...转载 2018-09-10 14:03:09 · 637 阅读 · 1 评论 -
C++中string、char *、char[]的转换
一、string转char*。 主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy();1.data()方法,如:1 string str = "hello";2 const char* p = str.data();//加const 或者用char * p=(char*)str.data();的形式 同时有一点需要说明,这...转载 2018-09-10 13:58:57 · 142 阅读 · 0 评论 -
标准C函数库的字符串与整型、浮点型的相互转换
在C/C++语言中没有专门的字符串变量,通常用字符数组来存放字符串。字符串是以“\0”作为结束符。C/C++提供了丰富的字符串处理函数,下面列出了几个最常用的函数。 ● 字符串输出函数puts。 ● 字符串输出函数gets。 ● 字符串连接函数strcat。 ● 字符串复制函数strcpy。 ● 测字符串长度函数strlen。字符串是面试的重点考查部分的相关知识,...转载 2018-09-02 22:55:53 · 1845 阅读 · 0 评论 -
常见的几种求模运算(mod)——加减乘、除的小费马定理、指数的欧拉降幂
在C/C++中,+,-的优先级低于/,*,%,而/,*,%优先级一样,所以就从左到右1.乘法我们在做题的时候,遇到(a*b)%c,由于可能a*b先计算的话,会超精度,所以我们可以这么转化(a*b)%c = (a%c)*(b%c)%c 2.加法或减法(a+b)%c =( (a%c)+(b%c) )%c 3.除法我们一般遇到除法 (a/b)%MOD的时候,会将除法变...原创 2018-08-19 23:06:24 · 11086 阅读 · 0 评论 -
【牛客网】Wannafly挑战赛22,A题计数器:裴蜀定理结合扩展欧几里得思路
题目链接:https://www.nowcoder.com/acm/contest/160/A 题目:有一个计数器,计数器的初始值为0,每次操作你可以把计数器的值加上a1,a2,...,an中的任意一个整数,操作次数不限(可以为0次),问计数器的值对m取模后有几种可能。 输入:第一行两个整数n,m接下来一行n个整数表示a1,a2,...,an1≤n≤1001≤m,...原创 2018-08-18 15:39:05 · 388 阅读 · 0 评论 -
判断多边形的凹凸性和计算多边形面积:利用向量叉乘
根据百度百科的讲解:凸多边形现在重点讲解顶点凹凸性法(最常用也是较为简单的方法):计算总结在最后。利用向量叉乘的相关知识进行计算:假设当前连续的三个顶点分别是P1,P2,P3。计算向量P1P3,P1P2的叉乘,也可以计算三角形P1P2P3的面积,得到的结果如果大于0,则表示P2点在线段P1和P3的右侧,此时P2对应的角度小于180。然后依次计算下一个前后所组成向量的叉乘,如...原创 2018-08-08 01:02:21 · 8927 阅读 · 6 评论 -
求序列的逆序数
逆序数概念:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。即,在数组中,若0=<i<j<=n-1,有a[i]>a[j],就说明这两个数是逆序对,一个数组中逆序对数量就是逆序数。 代码实现思路:第一种思路:用两个for循环解决,用第一个循环i从数组开头开始,另一...原创 2018-07-26 16:30:25 · 2651 阅读 · 0 评论 -
归并排序原理讲解及C++实现
算法原理讲解:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。即将要排序的序列进行二分,然后对左右两边进行排序,最后进行合并,而二分的时候,不止一次二分,而是不断分到最后...原创 2018-07-26 15:39:43 · 2320 阅读 · 0 评论