
算法
文章平均质量分 59
qunqin
这个作者很懒,什么都没留下…
展开
-
树的创建和按层遍历
以下是有关树的创建和按层遍历的代码,其中按层遍历使用栈进行辅助#include#include#include#includeusing namespace std; struct BinaryTree{int value;BinaryTree *lefttree;BinaryTree *righttree;};//树的创建 void原创 2011-11-14 21:12:53 · 833 阅读 · 2 评论 -
【每日面试题】找出数组中两个只出现一次的数字
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。代码:int firstNotDouble(int a[],int n){ if(n return -1; int result=a[0]; for(int i=1;i result^=a[i]; return r原创 2012-03-10 18:46:37 · 925 阅读 · 0 评论 -
【每日面试题】在字符串中删除特定的字符
题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。代码:void DeleteString(char *str,char *des){ int phash[256]={0}; while(*des!='\0') { pha原创 2012-03-10 20:20:00 · 728 阅读 · 0 评论 -
【每日面试题】求一个二叉树中任意两个节点间的最大距离
)求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。代码:void MaxDistance(Tree* root,int &deep,int & maxdis){ if(root) { deep=0; maxdis=0;原创 2012-03-11 15:09:48 · 5000 阅读 · 0 评论 -
二叉树两结点的最低共同父结点
题目:求二叉树两节点的最低共同父节点代码;//求node节点是否在head树中bool findNode(Tree* head,Tree* node){ if(head==null||node==null) return false; if(head==node) return true; if(!head->left)原创 2012-03-12 16:31:39 · 1118 阅读 · 0 评论 -
【每日面试题】字符串通配符匹配问题
题目:在一篇英文文章中查找指定的人名,人名使用二十六个英文字母(可以是大写或小写)、空格以及两个通配符组成(*、?),通配符“*”表示零个或多个任意字母,通配符“?”表示一个任意字母。如:“J* Smi??” 可以匹配“John Smith” .请用C语言实现如下函数:void scan(const char* pszText, const char* pszName);注:psz原创 2012-04-15 11:49:15 · 3147 阅读 · 1 评论 -
【每日面试题】通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小
有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小。例如:var a=[100,99,98,1,2, 3];var b=[1, 2, 3, 4,5,40];求解关键:A=sum(a)-sum(b);i和j之间进行交换后:A'=sum(a)-a[i]+b[j]-(sum(b原创 2012-04-30 21:39:15 · 2444 阅读 · 0 评论 -
【每日面试题】矩阵的螺旋输出
输入一个m*n的矩阵,将其螺旋输出,如下图:代码如下://矩阵螺旋输出#define max 100int data[max][max]={0};int Output(int m,int n,int &x,int &y,int cnt,int total){ if(m==1&&n==1) { data[x][y]=cnt++; pri原创 2012-04-18 21:55:41 · 1016 阅读 · 0 评论 -
【每日面试题】使用递归方法判断数字是否是升序数组
题目:使用递归方法判断数字是否是升序数组代码:bool IsIncrease(int *a,int n){ static int i=0; if(n==0) return false; if(n==1) return true; if(i<n-2) { i++; IsIncrease(a,n); } ret原创 2012-05-03 21:14:23 · 1615 阅读 · 0 评论 -
【每日面试题】随机数构成的数组中找到长度大于=3 的最长的等差数列
题目:求随机数构成的数组中找到长度大于=3 的最长的等差数列, 输出等差数列由小到大:如果没有符合条件的就输出格式:输入[1,3,0,5,-1,6]输出[-1,1,3,5]要求时间复杂度,空间复杂度尽量小。分析:首先对数组进行排序,然后在进行查找。代码:void longMin(int *a,int n){ if(n<=1) return; int l原创 2012-05-03 22:20:56 · 2286 阅读 · 0 评论 -
【每日面试题】2012年腾讯暑期实习生招聘笔试附加题1
两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]...*a[N-1]/a[i];要求:1.不准用除法运算2.除了循环计数值,a[N],b[N]外,不准再用其他任何变量(包括局部变量,全局变量等)3.满足时间复杂度O(n),空间复杂度O(1)。 代码如下:void qupdate(int *a,int *b原创 2012-04-20 21:06:50 · 1226 阅读 · 0 评论 -
【每日面试题】字符串倒置的递归算法
给定一个字符串,使用递归的算法将其倒置。代码:void reserve1(char str[],int i,int h){ char t; printf("i=%d%d\n",i,h); if(i>h) return; else { reserve1(str,++i,--h); printf("i=%d\n",i)原创 2012-05-12 20:43:06 · 2459 阅读 · 0 评论 -
【每日面试题】字符串的顺序变化
给定一个字符串,将其中的*提前,不改变字符串的顺序,如ab**cd**d,改变后的顺序****abcdd。代码如下:int findXing(char *str){ int len=strlen(str); int count=0; int i=len-1; int j=len-1; while(i>=0) { if(str[i]!='*') {原创 2012-05-14 22:23:11 · 834 阅读 · 0 评论 -
堆排序算法及其应用
堆积排序是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。 堆可以被看成是一棵树,结点在堆中的高度可以被定义为从本结点到叶子结点的最长简单下降路径上边的数目;定义堆的高度为树根的高度。我们将看到,堆结构上的一些基本操作的运行时间至多是与树的高度成正比,为O(lgn)。 堆排序的算法代码实现(最大堆实现):原创 2012-06-12 15:52:33 · 2889 阅读 · 1 评论 -
并查集简单题-pku1611
题目链接:http://poj.org/problem?id=1611代码:#includeint father[30001];int count[30001];int i,m,n,first,a,b;void setfather(int n) //初始化,将各自fahter设置为本身{ for(i=0;i<n;i++) { father[i]=i; count[原创 2013-03-30 11:40:11 · 1117 阅读 · 0 评论 -
图算法总结
图的定义: 很简单,G(V,E), V、E分别表示点和边的集合。 图的表示: 主要有两种,邻接矩阵和邻接表,前者空间复杂度,O(V2),后者为O(V+E)。因此,除非非常稠密的图(边非常多),一般后者优越于前者。图的遍历: 宽度遍历BFS(start): (1) 队列Q=Empty,数组bool visited[V]转载 2013-04-08 16:32:28 · 800 阅读 · 0 评论 -
【每日面试题】求一个矩阵中最大的二维矩阵(元素和最大)
题目:求一个矩阵中最大的二维矩阵(元素和最大)本代码所采用的是最土的一次求出值,然后比较大小//求一个矩阵中最大的二维矩阵(元素和最大).void sum1(int *a,int n,int m){ int max=0; int first=0; int second=0; for(int i=0;i { int j=0;原创 2012-03-09 20:56:24 · 1225 阅读 · 0 评论 -
【每日面试题】输入n求和为m的所有组合
题目:输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.分析,由该题可知是典型的背包问题,根据该数是否加入进行递归运算。代码://典型背包问题void print(int n,int m,vector&list){ if(n==0) return; if(m==0) { for(in原创 2012-03-09 19:57:46 · 3139 阅读 · 1 评论 -
KMP算法查找字符串
使用KMP算法查找字符串,时间效率为O(m+n):#include#include#include//KMP算法寻找字符串匹配,时间效率为O(m+n)void cmpnext(const char *pattern,int *next)//next算法{ next[0]=-1; int index; int len=strlen(pattern);原创 2011-11-15 23:21:45 · 564 阅读 · 0 评论 -
在字符串中删除特定的字符
本程序主要是在字符串A中删除含有B中的字符,代码如下:/**在字符串中删除特定的字符*/#include#include#include//删除dest中包含word的字符void deleteWord(char *dest,char *word){ int len1=strlen(dest); int len2=strlen(word); int原创 2011-11-17 19:53:31 · 670 阅读 · 0 评论 -
输入一个表示整数的字符串,把该字符串转换成整数并输出
该算法就是输入一个整数字符串,把该字符串转换为整数输出,算法代码如下:#include#include#include//输入一个表示整数的字符串,把该字符串转换成整数并输出long int reserve(char *dest){ int len=strlen(dest); bool flag=false; if(dest[0]=='-') flag原创 2011-11-17 21:44:13 · 3100 阅读 · 3 评论 -
图的Flord算法(图中点到点的最短距离
include "stdafx.h"#include#include#include#define MAXVEX 20#define INFINY 65536struct graph{ int numberV,numberE; int V[MAXVEX]; //图的顶点 int E[MAXVEX][MAXVEX]; //图的边的权重};typed原创 2011-11-21 10:43:37 · 3219 阅读 · 0 评论 -
最小支撑树之prim算法
无向图的最小支撑树算法:prim算法。#include "stdafx.h"#include#include#include#define MAXVEX 20#define INFINY 65536struct graph{ int numberV,numberE; int V[MAXVEX]; //图的顶点 int E[MAXVEX][MAXVEX]原创 2011-11-21 20:25:34 · 1111 阅读 · 0 评论 -
翻转字符句子中单词顺序
对于给定一句字符,将其进行翻转。如" I am a student." 翻转后的结果为"student. a am I"。代码如下: #include#include#include#include//翻转句子中单词顺序void reserve(char* data,int begin,int end) //注意字符串过界{ if(begin>原创 2011-11-23 22:21:14 · 576 阅读 · 0 评论 -
(算法)输出单链表的倒数第k个节点,删除特点的节点和从链表尾一次输出节点值
输出单链表的倒数第k个节点,其中第0个节点为尾节点,算法如下:#include#include#includestruct ListNode{ int value; ListNode* nextNode;};//链表创建void createList(ListNode* &root,int a){ if(root==NULL) { root原创 2011-11-24 21:30:16 · 1025 阅读 · 0 评论 -
输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求算法的时间复杂度O(n).#include#include#include//输入的数据小于100void printSum(int a[],int n,int total){ int b[100]={0}; for(int i=0;i b[a[i]]++;原创 2011-11-27 20:18:44 · 2752 阅读 · 3 评论 -
(算法)二叉树转换为双向链表
将二叉树转换为双向链表: 5 / \ 2 7 / \ / \1 3 6 8双向链表:1=2=3=5=6=7=8#include#include#include#include#include#includeusing namespace std; struct原创 2011-11-28 22:50:29 · 881 阅读 · 0 评论 -
算法实现数组前半部分为奇数,后半部分为偶数。
算法实现一个整数数组前办部分为奇数,后半部分为偶数,要求时间复杂对为O(n).#include#includebool isEven(int a) //判断奇偶{return a%2==0?true:false;}void transformation(int data[],int n)//实现算法前半部分为奇数,后半部分为偶数{ int be原创 2011-11-09 21:57:08 · 937 阅读 · 0 评论 -
全排序算法实现
给定一个数组,如数组A[]={a,b,c},给出全排序结果:abc,acb,bac,bca,cab,cba.一下是给出递推算法的结果。#include#include//求全排序void swap(char &a,char &b){char c;c=a;a=b;b=c;}void CalcAllPermutation_R(char perm[],int原创 2011-11-09 21:30:07 · 883 阅读 · 0 评论 -
【每日面试题】链表相关问题1
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};函数的声明如下:void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted);分析:这原创 2012-02-28 18:57:55 · 1002 阅读 · 0 评论 -
【每日面试题】判断字符串是否对称
题目:给出以字符串,判断其是否对称,如字符串“abcba”,该字符串为对称字符串。代码:/字符串是否对称bool isDouble(char *des){ bool flag=true; char* src; src=des+strlen(des)-1; cout while(des { if(*des==*src) { des++原创 2012-03-05 16:24:40 · 1184 阅读 · 0 评论 -
【每日面试题】最大连续递增数字串
题目:求最大连续递增数字串(如“ads3sl456789DF3456ld345AA”中的“456789”)代码如下:void longIncrease(char* str){ if(str==NULL) return ; int len=strlen(str); int max=0; int n=1; int first=0; for(int i=0;i原创 2012-03-05 17:34:28 · 1280 阅读 · 0 评论 -
【每日面试题】输入一个正数n,输出所有和为n连续正数序列
题目:输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。代码如下: //输入一个正数n,输出所有和为n连续正数序列void func(int n){ for(int i=1;i { int m=0,k=0; int sum=0; for(i原创 2012-03-08 16:54:09 · 1783 阅读 · 0 评论 -
POJ题目分类
OJ上的一些水题(可用来练手和增加自信)(poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期:一.基本算法:(1)枚举. (poj1753,poj2965)(2)贪心(poj1328 F,poj2109 F,poj2586 F)(3)递归和分治法.(4)递推.(5)构造转载 2013-03-24 20:51:36 · 775 阅读 · 0 评论