机试算法题
文章平均质量分 74
海空天空
这个作者很懒,什么都没留下…
展开
-
重复字符串过滤
#include"stdio.h"#include"string.h"//重复字符串的过滤 方法二void stringFilter2(const char *p,int len,char *q){ int i,j=0; char temp; int numString=0; int count[19900]={0}; for(i=0;i<len;i++) { temp原创 2014-09-12 19:36:40 · 1656 阅读 · 0 评论 -
在二元树中找出和为某一值的所有路径
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22 和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10, 12 和10, 5, 7。思路:1、当访问到某一节点时,把该结原创 2015-02-09 16:13:39 · 501 阅读 · 0 评论 -
求子数组的最大和
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。因为是O(N)的复杂度,因此需采用的DP的思想,记录下当前元素之和(为其最优转载 2015-02-09 10:26:37 · 378 阅读 · 0 评论 -
在栈中增加min函数
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。算法:在栈中设置一个辅助栈来保存最小值代码:/** 为栈增加一个min函数,获取栈中的最小值,复杂度为1** author :xiaozhi xiong ** date:2014-02-08**/ #include "stdio.h"#includ原创 2015-02-08 11:06:01 · 665 阅读 · 0 评论 -
寻找两个链表的交点
1首先判断是否有交点2找到第一个交点方法一:使用暴力法,时间复杂度为N*N方法二:判断是否相交的办法是最后一个节点是否相同,如果相同,则相交,否则不相交两个链表的长度分别为len1,len2,在长的链表的第abs(len1-len2)开始和短链表一次比较,找到第一个相同的那个链表,时间复杂度为3*N原创 2015-01-29 20:23:57 · 549 阅读 · 0 评论 -
求两个数组的交集
方法:先用A创建 有序二叉树,然后用B中的数值依次在二叉树中寻找,如果找到了,就增加到交集数组中复杂度:创建二叉树的复杂度logn,在二叉树中查找的复杂度是 logn*(m+1) #include"stdio.h"int commonArray[20];int com_len=0;struct node{ int data; struct node *lNode; struc原创 2015-01-28 18:14:36 · 542 阅读 · 0 评论 -
杨氏数组查找
1. 简述 杨氏矩阵中,每行元素是递增的,每列元素也是递增的。即a[i][j]2. 原理 从矩阵的左下角或者矩阵的右上角处开始递归运行,以左下角为例,value为要查找的值,(i,j)为当前矩阵中的位置,初始为(M-1, 0)。 如果超过了矩阵范围则说明不存在这样的元素,返回-1,-1。 否则的话,如果当前位置的值大于value,说明要移原创 2015-01-27 21:46:21 · 566 阅读 · 0 评论 -
多项式求和(用链表)
if(link2 == NULL) break; temp2=temp2->next ;原创 2014-10-20 21:47:38 · 642 阅读 · 0 评论 -
判断回文
#include"stdio.h"int HuiWen(char *str,int num){ int left,right; if(num%2==0) { left=num/2-1; right=num/2; } else{ left=num/2-1; right=num/2+1; } while(left>=0) { if(str[left]!=str原创 2014-10-19 09:00:29 · 322 阅读 · 0 评论 -
字符串加减运算
通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。 输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。 补充说明: 1、操作数为正整数,不需要考虑计算结果溢出的情况。 2、若输入算式格式错误,输出结果为“0”。 要求实现函数: void arithmetic(cons原创 2014-09-14 20:52:39 · 7237 阅读 · 0 评论 -
字符串进行压缩
#include"stdio.h"#include"string.h" void stringZip(const char *p,int len,char *q){ int i,numString=0; int j=0; char stringZip[48]; int count[24]={0}; char temp; char str_int; if(len<=0) {原创 2014-09-13 07:57:55 · 825 阅读 · 0 评论 -
寻找最小的k个数
寻找最小的k个数题目描述:5.查找最小的k个元素题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。算法1:直接排序,找到最小的k个数算法2:将数组a中的前k个数放到数组b中,在将a中后面n-k个数的值与b中最大的数比较,如果a中的数更小,将a中的这个数与b中的最大数交换,当然也可以将b建成一个最大堆代原创 2015-02-11 11:19:09 · 605 阅读 · 0 评论