![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 73
longhopefor
自强不息
展开
-
最长回文子串问题
问题描述:给定一个字符串找出最长回文字符串范围,例如abacabac,最长回文子串为abacaba。1.使用动态规划的思想进行求解,思路是利用子串从短到长进行逐步的动态规划求解,如果一个字符串的子串是回文串,那么就可以存储这个状态,然后从短向长蔓延进行计算:当i == j 时,肯定是长度为1 的回文串,flag[i][j] = 1当i+1 == j 时,S[i] == S[j]原创 2014-03-11 12:56:51 · 571 阅读 · 0 评论 -
字符串转整数
算法描述:依次扫描字符串,检测到第一个数字或正负符号时开始做类型转换,之后检测到非数字或结束符 \0 时停止转换,返回整型数。注意测试用例:1. 不规则输入,但是有效,”-3924x8fc”,” + 413”,2. 无效格式,” ++c”, ” ++1”3. 溢出数据,”2147483648”#include "stdafx.h"#include#include原创 2014-03-10 09:44:51 · 945 阅读 · 0 评论 -
c++实现二叉搜索树
自己实现了一下二叉搜索树的数据结构,记录一下:#include using namespace std;struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int value) { val=value; left=NULL; right=NULL; }};clas原创 2014-06-13 21:23:25 · 990 阅读 · 0 评论 -
找出所有最长连续重复子串及其个数
问题描述:找出字符串中所以最长连续重复子串及其个数比如:输入:123234,最大连续重复字符串为23,个数为2 输入:5555,最大连续重复字符串为555,个数为2 输入:aaabbb 最大连续重复字符串为aa,个数为2;和bb,个数为2必须存在重复的字符串才算,只出现一次的不算。可能存在多个相同长度的不同字符串,比如aaabbb。原创 2014-07-23 20:17:17 · 4481 阅读 · 0 评论 -
IT公司面试题--最大储水量问题
看下面这个图片,在这个图片里我们有不同高度的墙。这个图片由一个整数数组所代表,数组中每个数是墙的高度。上边的图可以表示为数组[2,5,1,2,3,4,7,7,6],假如开始下雨了,那么墙之间的水坑能够装多少水呢?”以1×1的方块为单位计算容积。所以,在上边的图中下标为1以左的都会漏掉。下标7以右的也会漏掉。剩下的只有在1和6之间的一坑水,容积是10。如下图所示。原创 2014-05-24 16:54:47 · 3295 阅读 · 0 评论 -
判断IP地址是否合法
今天写了个判断IP地址是否合法的程序,主要是锻炼对字符串的处理,一些主要的约束条件如下:1、输入IP为XXX.XXX.XXX.XXX格式2、字符串两端含有空格认为是合法IP3、字符串中间含有空格认为是不合法IP4、类似于 01.1.1.1, 1.02.3.4 IP子段以0开头为不合法IP5、子段为单个0 认为是合法IP,0.0.0.0也算合法IP代码如下:#inc原创 2014-04-26 11:54:43 · 2543 阅读 · 0 评论 -
C++链地址法实现哈希表
哈希表,也叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数,存放记录的数组叫做哈希表。哈希函数最主要的设计在于哈希函数和冲突处理的解决,其中哈希函数的设计方法主要有直接定址法和除留余数法;冲突处理的方法主要有开放定址法和链地址法。本文主要实现了一个基本存放字符串的哈希表,冲原创 2014-05-14 21:36:15 · 3716 阅读 · 0 评论 -
c++分别用数组和链表实现栈的操作
栈在实际编程中经常会用到,本文利用数组和链表分别实现了栈的操作。1.数组方式实现如下:#includeusing namespace std;template class arraystack{public: arraystack(); ~arraystack(); bool isempty(); void push(const T& data)原创 2014-04-08 16:07:21 · 1899 阅读 · 0 评论 -
堆排序
本文中讨论的堆(Heap)指的是一种数据结构,它在逻辑上是一颗完全二叉树,存储上是则是利用一个数组(二叉堆)来实现,它的基本定义如下:1.父节点的值大于等于任一子女的值;2.左右子数都满足1的性质;堆分为大顶堆和小顶堆,其基本操作包括建堆,插入节点和删除节点。插入操作都是将新数据放在数组最后,然后向上调整;删除操作则是将头结点与最后一个节点的元素互换,然后对新的头结点向下调整,执行删除原创 2014-03-31 20:05:26 · 710 阅读 · 0 评论 -
快速排序
快速排序采用了一种分治的策略,该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。代码如下:// qsort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include usi原创 2014-03-17 19:53:41 · 510 阅读 · 0 评论 -
归并排序
归并排序具体分成三个过程:(1)分解:将当前区间一分为二,即求分裂点 mid = (low + high)/2; (2)求解:递归地对两个子区间 array[low..mid] 和 array[mid + 1..high] 进行归并排序;递归的终结条件:子区间长度为 1(一个记录自然有序)。(3)合并:将已排序的两个子区间R[low..mid]和R[mid + 1..h原创 2014-03-14 16:21:15 · 536 阅读 · 0 评论 -
O(n)时间内求最长回文子串
下面介绍一种O(N)的算法:Manacher,算法首先将输入字符串S, 转换成一个特殊字符串T,转换的原则就是将S的开头结尾以及每两个相邻的字符之间加入一个特殊的字符,例如#例如: S = “abaaba”, T = “#a#b#a#a#b#a#”.为了找到最长的回文字串,例如我们当前考虑以Ti为回文串中间的元素,如果要找到最长回文字串,我们要从当前的Ti扩展使得 Ti-d原创 2014-03-11 18:08:21 · 599 阅读 · 0 评论 -
C++二维动态数组memset()函数初始化
先说说memset函数:void *memset(void *s,int c,size_t n)作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。memset()的内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;例:char a[100];memset(a, '/0', sizeof(a));mems原创 2014-03-11 10:21:24 · 10653 阅读 · 3 评论 -
自己实现的string类
自己实现的一个string类,包括基本构造,复制构造,赋值和析构函数,比较函数,输入输出函数,锻炼一下动手能力。#include #include #include using namespace std;class MyString{public: MyString(const char *s=NULL); MyString(const MyString& rh原创 2014-09-01 20:11:24 · 942 阅读 · 1 评论