算法
文章平均质量分 56
晚风_清扬
路漫漫
展开
-
排序算法—冒泡排序
冒泡排序的时间复杂度:平均情况下O(N^2),最好情况O(N),最坏情况O(N^2)空间复杂度:O(1)是一种稳定的算法void swap(int &a, int&b)//c++语法,引用{ int t = a; a = b; b = t;}void bubble(int a[], int n)//冒泡排序,一轮下来最大或者最小的往最后位置冒炮{ int flag = 1;原创 2017-09-30 16:25:38 · 199 阅读 · 0 评论 -
memmove处理内存重叠的情况
#include<stdio.h>//处理内存重叠void* memmove(void* des, void* src, size_t count){ if (des == NULL || src == NULL || count <= 0)return des; void* ret = des; char * dest = (char*)des; char* so...原创 2018-02-18 15:09:03 · 462 阅读 · 0 评论 -
算法----递归求子集
#include<stdio.h> #include<string.h> char s[50];int index = 0;//标记选择后的字符下标void reSort(char *pArray, int begin,int pLen , int len){ if (pLen == 0) { puts(s); return; } for (i...原创 2018-02-18 15:47:17 · 3194 阅读 · 0 评论 -
算法----递归回溯求排列组合
#include <stdio.h>#include <stdlib.h>#include <string.h>void swap(char *a,char*b){ char t = *a; *a = *b; *b = t;}void permutation(char *s, int m, int len) { if (m == l...原创 2018-02-18 16:09:36 · 603 阅读 · 0 评论 -
N皇后
#include <iostream>using namespace std;int queue[128];//下标表示行数,值表示列数。//一个皇后放一行,皇后不能同行同列。同对角线int N;int num;void Nquue(int k)//在0——k-1行皇后摆好的情况下,摆放第K行的皇后{ if (k == N) { //摆好所有的皇后 cout...原创 2018-02-02 22:45:32 · 224 阅读 · 0 评论 -
manacher算法之最大回文子串
#include<iostream>#include<string>#include<algorithm>using namespace std;string Manacher(string &s)//预处理偶数回文。比如讲abba处理成#a#b#b#a#,这样就形成以#为对称轴的回文串{ string manachers("#"); fo...原创 2018-02-18 12:42:53 · 244 阅读 · 0 评论 -
KMP算法
#include<stdio.h>#include<stdlib.h>#define N 25#include<string.h>/*前缀:除了最后一个字符以外,一个字符串的全部头部组合后缀:除了第一个字符以外,一个字符串的全部尾部组合注:子串和主串存在许多的部分匹配的情况下才体现出他的优势*/void GetNext(int next[], ...原创 2018-02-18 15:11:18 · 176 阅读 · 0 评论 -
TOPK问题----代码实现打印数据中前K大的数
/*问题: 随机产生100000个整数,范围是【0,1000】,快速统计出值最大的前10个?*/#include<iostream>#include<vector>#include<queue>#include<ctime>#include<functional>using namespace std;class To...原创 2018-04-20 23:23:35 · 384 阅读 · 0 评论 -
腾讯面试题----对字符串中单词出现次数排序总结
#include<iostream>#include<algorithm>#include<map>#include<string>#include<vector>#include<functional>using namespace std;void SortWord(char *str){ if (st...原创 2018-05-11 17:08:00 · 526 阅读 · 0 评论 -
算法----网易笔试牛牛找工作
时间限制:2秒空间限制:65536K为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。 输入描述:每个输入包含一个测试用例。每个测试用例的第一行包含两个正整数,分别表示工...原创 2018-05-08 15:34:01 · 287 阅读 · 0 评论 -
算法----连续子数组的最大和
题目描述一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3输入描述:输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。输出描述:所有连续子数组中和最大的值。示例1输入3 -1 2 1输出3AC代码#include&...原创 2018-05-08 15:38:43 · 519 阅读 · 0 评论 -
C/C++代码:递归遍历当前文件夹下的文件和子文件夹
#include <iostream>#include <io.h>#include <string>using namespace std;void listFiles(const char * dir,int tab);int main(){ string dir; cout << "Enter a directory (e...原创 2018-09-01 14:06:33 · 5268 阅读 · 0 评论 -
算法----大数相乘
题目描述有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。输入描述:空格分隔的两个字符串,代表输入的两个大整数输出描述:输入的乘积,用字符串表示示例1输入复制72106547548473106236 982161082972751393输出复制70820244829634538040848656...原创 2019-02-25 21:15:05 · 248 阅读 · 0 评论 -
剑指offer----把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323class Solution {public: string PrintMinNumber(vector<int> numbers) { if(numbers.size(...原创 2019-02-26 13:19:36 · 200 阅读 · 0 评论 -
剑指offer----数字在排序数组中出现的次数
时间限制:1秒 空间限制:32768K 热度指数:187371本题知识点: 数组 算法知识视频讲解题目描述统计一个数字在排序数组中出现的次数。 AC code 二分法差找class Solution {public: int GetNumberOfK(vector<int> data ,int k) { if(data.size...原创 2019-02-26 13:32:35 · 251 阅读 · 0 评论 -
排序算法—堆排序
堆的定义:堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:即任何一非叶点的值不大于或者不小于其左右孩子节点的值。将一个数组看成是一个完全二叉树,利用完全二叉树左右孩子和其父亲节点在数组中的下标特点进行调整后符合堆的定义最后达到整个序列有序的算法:当数组从0下标开始时,一根节点的左右孩子存在时满足 : 左孩子下标=父节点*2+1; 右孩子下标=父节点*2+2;假设有数组int a[10] = {...原创 2017-09-23 18:50:26 · 220 阅读 · 0 评论 -
DFS----Red and Black (POJ1979)
There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can'原创 2018-02-07 21:29:25 · 144 阅读 · 0 评论 -
OpenSSL编程-RSA编程详解
嗨!大佟!时间飞逝,记录思绪,致力于C/OOC/C++/Python/Lua/Mail应用研究博客首页个人Wiki开源代码企业应用联系我OpenSSL编程-RSA编程详解本文由 大佟 发表于 2014年06月26日 , 浏览: 38,699次 , 评论: 0条一. RSA PEM文件格式1. PEM私钥格式文件12-----BEGIN RSA PRIVATE KEY----------END RS...转载 2018-02-10 18:36:29 · 901 阅读 · 0 评论 -
排序算法—归并排序
归并排序的定义:归并排序算法采用的是分治算法,即把两个(或两个以上)有序表合并成一个新的有序表,即把待排序的序列分成若干个子序列,每个子序列都是有序的,然后把有序子序列合并成整体有序序列,这个过程也称为2-路归并.注意:归并排序的一种稳定排序,即相等元素的顺序不会改变.大致过程:归并排序的时间复杂度归并排序的最好、最坏和平均时间复杂度都是O(nlogn),而空间复杂度是O(n)附上代码:void ...原创 2017-09-30 15:58:29 · 231 阅读 · 0 评论 -
只有10%的程序员可以写出的没有Buy的二分查找
int search(int a[], int n , int x){ if (a == NULL || n < 1)//传入参数检查 return -1; int low = 0; int high = n-1; while (low <= high)//一个元素的时候也有可能 { int mid = (high - low ) / 2 + low ;//防止超出int的原创 2017-11-04 20:01:16 · 236 阅读 · 0 评论 -
算法题-数字黑洞
题目描述给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到 一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 -原创 2018-02-02 13:48:20 · 956 阅读 · 0 评论 -
动态规划——数字三角形(百练ID2760)
描述73 88 1 02 7 4 44 5 2 6 5(图1)图1给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的那个数或者右边的那个数。输入输入的是一行是一个整原创 2018-02-01 19:24:08 · 666 阅读 · 0 评论 -
动态规划---最长上升子序列(百练ID2757)
描述一个数的序列bi,当b1 b2 bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1 i1 i2 iK 你的任务,就是对于给定的序列,求出最长上升子序列的长度。输入输入的第一行是序列的长度N (1 输出最长上升子序列的长度。样例输入71 7原创 2018-02-01 20:09:19 · 220 阅读 · 0 评论 -
动态规划---最长公共子序列(百练ID2706)
描述我们称序列Z = 1, z2, ..., zk >是序列X = 1, x2, ..., xm >的子序列当且仅当存在 严格上升 的序列1, i2, ..., ik >,使得对j = 1, 2, ... ,k, 有xij = zj。比如Z = 是X = 的子序列。现在给出两个序列X和Y,你的任务是找到X和Y的最大公共子序列,也就是说要找到一个最长的序列Z,使得Z既是X的子序列也原创 2018-02-01 20:25:52 · 269 阅读 · 0 评论 -
大整数加法(百练ID2981)
描述求两个不超过200位的非负整数的和。输入有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。样例输入2222222222222222222233333333333333333333样例输出55555555555555555555原创 2018-02-04 11:14:28 · 187 阅读 · 0 评论 -
括号匹配问题(百练ID3704)
描述在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注.输入输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串原创 2018-02-04 11:16:26 · 1996 阅读 · 0 评论 -
大数减法(百练ID2736)
描述求两个大的正整数相减的差。输入共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。输出一行,即所求的差。样例输入99999999999999999999999999999999999999999999999999#include#include#includeusing namespace std原创 2018-02-04 12:56:48 · 284 阅读 · 0 评论 -
动态规划----交错01串
如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: "1","10101","0101010"都是交错01串。小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。 输入描述:输入包括字符串s,s的长度length(1 ≤ length ≤ 50),字符串中只包含'原创 2018-02-04 22:32:14 · 376 阅读 · 0 评论 -
算法----网易内推等差数列
如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是负数和零,我们就称数列S为等差数列。小易现在有一个长度为n的数列x,小易想把x变为一个等差数列。小易允许在数列上做交换任意两个位置的数值的操作,并且交换操作允许交换多次。但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列 输入描述:输入包括两原创 2018-02-04 22:33:49 · 184 阅读 · 0 评论 -
算法----句子翻转
题目描述给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello”输入描述:输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)输出描述:对于每个测试示例,要求输出句子中单词反转后形成的句子示例1原创 2018-02-04 22:42:57 · 358 阅读 · 0 评论 -
算法----水仙花数
题目描述春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。 现在要求输出所有在m和n范围内的水仙花数。输入描述:输入数据有多组,每组占一行,包括两个整数m和n(100 ≤ m ≤ n ≤ 999)。输出描述:对于每个测试实例,要求输出所原创 2018-02-04 22:45:36 · 371 阅读 · 0 评论 -
快速幂计算
转载学习自:http://www.cnblogs.com/CXCXCXC/p/4641812.html首先,快速幂的目的就是做到快速求幂,假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了好多好多。它的原理如下: 假设我们要求a^b,那么其实b是可以拆成二进制的,该二进制数第i位的权为2^(i-1),例如当b==11...原创 2018-02-09 22:46:49 · 187 阅读 · 0 评论 -
剑指Offer----矩阵中的路径(递归回溯法)
时间限制:1秒 空间限制:32768K 热度指数:134786 算法知识视频讲解题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X...原创 2019-02-26 14:18:05 · 335 阅读 · 0 评论