算法
文章平均质量分 61
云胡同学
GitHub 地址:https://github.com/stevenling
微信公众号:yunhu_123
展开
-
正则表达式笔记
介绍正则表达式就是记录文本规则的代码。在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。比如找出一段文本中所有的数字。如果你想查找某个目录下的所有的 Word 文档的话,你会搜索 *.docx 。在这里,* 会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂。元字符hi匹配含有 hi 的字符串,包括 him,history。\bhi\b精确查找,只匹配 hi。\b原创 2020-12-31 10:08:08 · 741 阅读 · 0 评论 -
药不能停
#include<iostream>#include<queue>using namespace std;struct T{ friend bool operator<(T a, T b) { return a.x > b.x; } int x;};int main(){ priority_queue<T> q; T c;原创 2016-05-29 22:06:40 · 762 阅读 · 0 评论 -
杭电 1003 Max Sum 题解
includeusing namespace std; int main() { int t, n, z, i, x, begin, last, temp, _case = 1; cin>>t; while(t–) { begin = 1, last = 1, temp = 1; int thissum = 0, max原创 2016-05-29 20:01:53 · 384 阅读 · 0 评论 -
c++ 优先队列
#include<iostream>#include<queue>using namespace std;struct T{ friend bool operator < (T a1, T a2) { return a1.x > a2.x; } int x;};int main(){ T a;...原创 2016-05-27 17:10:18 · 208 阅读 · 0 评论 -
连续子序列之和
1049 最大子段和题目描述N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值。当所给的整数均为负数时和为0。例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。Input第1行:整数序列的长度N(2<=N<=50000)第2-N+1行...原创 2016-05-23 22:08:49 · 591 阅读 · 0 评论 -
筛法求素数
#include<stdio.h>int main(){ int a[100], i, j; for(i = 2; i < 100; i++) a[i] = 1;//令2-99都为1 for(i = 2; i < 100/2; i++)//2 - 到 范围的一半的所有倍数 { if(a[i] == 1)/...原创 2016-04-13 13:47:46 · 241 阅读 · 0 评论 -
c++ 求矩阵行列式
概述求矩阵行列式代码#include<iostream>#include<stdlib.h>using namespace std;//变量int MenuSelect;int matrix[10][20];//矩阵int clone[10][20];int n;int DetValue;//函数void MainMenu();//主界面voi...原创 2019-11-02 17:55:34 · 4312 阅读 · 2 评论 -
剑指offer 从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。思路总共有五种方法,如下: 1. 将原链表的值存在一个栈中,然后再将栈输出到另一个vector数组里。 2. 直接将原链表的值存在一个vector数组里,最后reverse翻转一下。 3. 每插入一个,都放到最前面,复杂度是n2n^{2},不是很高效。 3. 通过递归到最后一个值,再一层一层输入到vector数组里。 4. 直接将链表翻转原创 2017-11-09 23:22:48 · 208 阅读 · 0 评论 -
编译原理去掉注释
#include"stdio.h"#include"stdlib.h"int main(){ FILE *fp1,*fp2, *fp3; char ch1,ch2,ch3,ch4; int flag1=0, flag2 = 0, flag3 = 0, flag4 = 0, flag5 = 0; int i = 0; int flag6 = 0;原创 2018-03-14 13:45:20 · 3537 阅读 · 5 评论 -
PAT甲级练习 Rational Sum (20)
题目描述 Given N rational numbers in the form “numerator/denominator”, you are supposed to calculate their sum.输入描述: Each input file contains one test case. Each case starts with a positive integer N ...原创 2018-06-20 04:50:57 · 193 阅读 · 0 评论 -
剑指offer 替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路从头到尾扫描字符串,每次碰到空格字符后,将之后的字符向后移动两个位置,然后再把%20填入进去。时间复杂度是 n^2,复杂度太高。遍历一次字符串,统计空格的总数,计算出替换后字符串总长度。从字符串后面开始复制和替换,首先准备两个指针...原创 2017-10-21 16:55:48 · 199 阅读 · 0 评论 -
数据结构之比较排序
思路比较法的一个简单思路是一组数据要弄两层循环,比较的那个数从第1个到n-1个(n为比较的数的数量),被比较的数从第2个到n个。假设我们需要的排序是从大到小(从小到大相同的道理),两个数比较,如果被比较的数也就是后面的数比前面大,那我们就把这两个数拿来交换。这里详细说一下交换的思路,假设有两杯水,一杯是开水,编号为a,一杯是可乐,编号为b,我们可以取一个空水杯,首先将编号a开水倒入空水杯c...原创 2019-01-24 13:50:50 · 242 阅读 · 0 评论 -
数据结构之堆排序
//构造一个最大堆,然后反着输出去#include<stdio.h>int h[101];int n;void swap(int x, int y){ int t; t = h[x]; h[x] = h[y]; h[y] = t;}void siftdown(int i)//需要向下调整的编号 需要的是最大堆 父节点小于子节点都要调整{...原创 2016-04-23 17:10:54 · 269 阅读 · 0 评论 -
模拟链表
#include<stdio.h>#include <stdlib.h>int main(){ int data[101], right[101];//right[i] = n代表data[i]右边的元素是data[n] eg right[3] = 10 表示data[3]右边的元素是data[10] int i, n, t, len; sc...原创 2016-04-18 22:14:08 · 261 阅读 · 0 评论 -
蛇形填数
#include<stdio.h>#include<string.h>int main(){ int a[10][10], n,tot= 0, x, y; memset(a, 0, sizeof(a));//刚开始将数组元素全部清零 tot = a[x=0][y=0] = 1; scanf("%d", &n);...原创 2016-04-16 14:07:40 · 222 阅读 · 0 评论 -
PAT 1001 A+B Format
题目描述Calculate a+b and output the sum in standard format – that is, the digits must be separated into groups of three by commas (unless there are less than four digits).计算 a+b,输出标准形式下的和,这个数必须被分成逗号隔开的...原创 2019-01-21 12:45:11 · 105 阅读 · 0 评论 -
PAT 1002 A+B for Polynomials
题目描述This time, you are supposed to find A+B where A and B are two polynomials.两个多项式相加,指数相同,系数相加。思路定义一个结果数组,下标是指数,值是其系数。代码#include<cstdio>struct node{ int e;//指数 double cof;//系数}a[1001...原创 2019-01-21 12:54:30 · 142 阅读 · 0 评论 -
数据结构之冒泡排序
思路外循环和之前一样,每相邻两个数都比较,最小的就沉在最右边,内循环的范围一次一次减少。代码,因为一个一个沉下去的就是排好的,相邻元素顺序错误我们就交换。过程代码#include<stdio.h>int main(){ int a[100], i, n, j, temp, max, k;//n为需要排序的数的数量 scanf("%d",&...原创 2019-01-27 18:09:31 · 265 阅读 · 0 评论 -
数据结构之选择排序
思路将待排序的数分为两部分,一部分是已排序,另一部分是未排序。将未排序部分中最小的数放在已排序部分后。过程代码#include<iostream>using namespace std;void selectSort(int a[], int len){ int smallestIndex; int i, j, temp; for(i = 0; i < l...原创 2019-01-27 18:17:44 · 1392 阅读 · 0 评论 -
剑指offer 用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路刚开始将队列中的值放在stack1里,这时候队列中的值在栈中是逆序的,取值的时候,判断stack2是否为空。为空,将stack1里的值放在stack2中,直到stack1为空,那么stack2存的就是队列中有顺序的值。不为空,直接获取栈顶的值,并pop。代码class Solution{publ原创 2017-11-12 20:11:07 · 133 阅读 · 0 评论 -
c 读入文件,多个字符串,按字典序排序
#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){ char s[100][100],c[100]={0}; FILE *fp; char l[100]={0}; fp=fopen("记事本.txt","r");//打开 int i=0,j,k; if(fp==NULL原创 2017-09-21 14:27:33 · 3462 阅读 · 0 评论 -
算法之选择排序
概述 同样的弄两层循环,用一个符号k记录比较数的下标,刚开始是 0,也就是数组第一个元素,用循环选出 i 之后的数的最大值,最大值下标用 k 表示,满足 i 不等于 k,然后与 a[i], 交...原创 2016-01-26 13:18:38 · 741 阅读 · 0 评论 -
01背包
#include<iostream>using namespace std;int max(int a, int b){ if(a > b) return a; else return b;}int main(){ int t, n, v,k, i; int c[1000], w[1000]; int f[1000]原创 2017-06-02 02:15:53 · 186 阅读 · 0 评论 -
三位数反转
比如输入123,输出的是321,然后如果是120输出的结果可能不确定,有两种情况21,省略最前面的0, 021,不省略前面的0. 第一种情况:#include<iostream>using namespace std;int main(){ int n; cin>>n; int m = (n % 10)*100 + (n / 10 % 10) * 10 + n /原创 2017-03-05 20:23:46 · 429 阅读 · 0 评论 -
7744问题
题目描述输出所有aabb式的4位完全平方数。千位百位相同,个位十位相同。思路总结就是要满足两个条件,第一个是平方数,第二个是要满足aabb式。代码先得到aabb式的数,然后开根号的数一定要是整数。 #include<iostream> #include<cmath>using namespace std;int main(){ for(int i = 1; i <= 9; i++原创 2017-03-05 20:22:18 · 2722 阅读 · 0 评论 -
删数问题 贪心
#include<iostream>#include<string>using namespace std;string N;int s;void find_min_int(){ int m = N.size(); if(s >= m) { N.erase(); return; } while(s > 0)原创 2016-06-26 14:05:16 · 257 阅读 · 0 评论 -
算法之归并排序
比如 序列 (1, 8, 12 , 14,3, 7, 9, 15) 看做两个序列(1, 8, 12, 14,) (3, 7, 9, 15)左边的下标范围是[low, mid] 右边是[mid+1, high] 然后用s = low t = mid+1 代表两个序列的起始位置 比较a[s] 与 a[t] 哪个小就存储在 一个新的数组容器里 然后小的下标值就向前移动继续一直比较 (1, 3, 7原创 2016-06-26 10:29:49 · 187 阅读 · 0 评论 -
算法之简化版桶排序
概述排序的数字多大,数组就得多大,复杂度总共就是O(m+n)代码#include<stdio.h>int main(){ int i, a[11], t, j; for(i = 0; i<11;i++) a[i] = 0;//将初始值都设为0 循环了11次 也就是桶的大小m for(i = 0; i < 5; i++...原创 2016-03-24 18:45:17 · 266 阅读 · 0 评论 -
算法之快速排序
快速排序概述设一个基准点,将比基准点小的放在基准点的左侧,比基准点大的放在基准点的右侧。 递归代码#include <stdio.h>// ----------------------------------------void QuickSort(int a[], int low, int high);// -------int main(){ ...原创 2016-03-24 19:24:35 · 277 阅读 · 0 评论 -
HDU2717 Catch That Cow
Problem DescriptionFarmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a poin原创 2017-08-30 21:55:06 · 307 阅读 · 0 评论 -
POJ1372 Knight Moves
Problem DescriptionA friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find the shortest closed tour of knight moves that visits each square of a given set of n squ原创 2017-08-28 22:21:58 · 344 阅读 · 0 评论 -
HDU1548 A strange lift
Problem DescriptionThere is a strange lift.The lift can stop can at every floor as you want, and there is a number Ki(0 <= Ki <= N) on every floor.The lift have just two buttons: up and down.When you a原创 2017-08-28 22:15:19 · 299 阅读 · 0 评论 -
POJ3984《迷宫问题》
题目描述定义一个二维数组: int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 Input一个5 × 5的二维数组,表示一个迷宫。数据保证有唯原创 2017-08-27 20:18:53 · 523 阅读 · 0 评论 -
数据结构之冒泡排序
外循环和之前一样,每相邻两个数都比较,最小的就沉在最右边,内循环的范围一次一次减少。 代码,因为一个一个沉下去的就是排好的,相邻元素顺序错误我们就交换。#include<stdio.h>int main(){ int a[100], i, n, j, temp, max, k;//n为需要排序的数的数量 scanf("%d",&n); for(i=0;i<n原创 2017-07-22 23:38:47 · 266 阅读 · 0 评论 -
堆排序
/构造一个最大堆,然后反着输出去#include<stdio.h>int h[101];int n;void swap(int x, int y){ int t; t = h[x]; h[x] = h[y]; h[y] = t;}void siftdown(int i)//需要向下调整的编号 需要的是最大堆 父节点小于子节点都要调整{ int原创 2017-07-22 23:35:12 · 157 阅读 · 0 评论 -
欧几里得辗转相除求最大公约数最小公倍数
最大公约数递归方法int gcd(int m, int n){ int temp; if(m < n)//m less than n change { temp = m; m = n; n = temp; } if(m % n == 0)//eg. 9 3 de gcd is 3 because...原创 2016-04-12 20:40:02 · 398 阅读 · 0 评论 -
大数阶乘
#include<iostream>using namespace std;// -------int main(){ int num, i, j, temp, res[1000]; int resDigit = 1; // resDigit 表示结果是几位数 如 4 是 1 位数, 25 两位数, 123 三位数 int carry; ...原创 2016-04-03 11:58:42 · 273 阅读 · 0 评论 -
整数划分问题
递归经典问题 将正整数表示成一系列整数之和 n = n1 + n2 + n3 +++ nk n1>=n2>=n3 >=nk >= 1; 正整数n的这种表示称为正整数n的划分。求正整数n的不同划分个数 例如 5 可以划分为(5), (4,1),(3,2),(3,1,1),(2,2,1)(2,1,1,1)(1,1,1,1,1)。总共7种可能。 建立q(n,m)n为正整数的划分, m为其中最大的原创 2016-05-30 21:52:29 · 415 阅读 · 0 评论