- 博客(25)
- 资源 (14)
- 收藏
- 关注
原创 输入一个正数 n,输出所有和为 n 连续正数序列。
1、输入一个正数 n,输出所有和为 n 连续正数序列 例如输入 15,由于 1+2+3+4+5=4+5+6=7+8=15,所以输出 3 个连续序列 1-5、4-6 和 7-8。 分析:我们用两个数small和big分别表示序列的最小值和最大值。首先把small初始化为 1,big初始化为 2。如果从small到big的序列的和大于n的话,我们向右移动smal
2012-09-18 15:18:52 6462
原创 2012校园招聘笔试总结----更新。。。
1、指向数组的指针 int (*ptr)[5]=(int (*)[5])100; int k=(int)(ptr+1); printf("%d\n",(int)(&(*(ptr+1))[2])); //100+5*4+2*4=1282、三维数组赋值与取值 int a[3][4][5]; int *p=(int *)a;
2012-09-14 16:39:55 1477 1
原创 查找子字符串----KMP算法深入剖析
假设主串:a b a b c a b c a c b a b 子串:a b c a c1、一般匹配算法逐个字符的比较,匹配过程如下: 第一趟匹配 a b a b c a b c a c b a b a b c 第二趟 a b a b c a b c a c b a b a 第三趟 a b a b c a b c a c
2012-09-12 16:25:57 2906
原创 排序----归并排序
1、归并排序 原理:假设初始序列有n个记录,则可以看成是n个有序的子序列,每一个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或者1的有序子序列;再两两归并......,如此重复,知道得到一个长度为n的有序序列为止。2、归并排序递归版本 递归将序列分行n个长度为1的子序列,然后递归将n各子序列排序成一个长度为n的有序序列。代码:#inclu
2012-09-12 15:05:12 761
原创 排序----希尔排序
1、希尔排序 算法思想简单描述:在直接插入排序算法中,每次插入一个数,使有序序列只增加1个节点,并且对插入下一个数没有提供任何帮助。如果比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换。D.L.shell于1959年在以他名字命名的排序算法中实现了这一思想。 算法先将要排序的一组数按某个增量d分成若干组,每组中记
2012-09-12 14:58:25 733
原创 图论----深度优先遍历和广度优先遍历
1、广度优先遍历 广度优先遍历从某个顶点v出发,首先访问这个结点,并将其标记为已访问过; 然后顺序访问结点v的所有未被访问的邻接点{vi,..,vj},并将其标记为已访问过; 然后将{vi,...,vj}中的每一个节点重复节点v的访问方法,直到所有结点都被访问完为止。具体代码实现时:我们可以使用一个辅助队列q,首先将顶点v入队,然后循环检测
2012-09-11 22:42:16 1618 1
原创 B-树、B+树、B*树的区别
1、二叉搜索树 性质:所有非叶子结点至多拥有两个儿子(Left和Right);每个结点存储一个关键字;非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树。 搜索:从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应
2012-09-11 22:41:03 32068 7
原创 多路查找树开篇
1、引言 以前我们所讨论的数据结构,处理数据都是在内存中。假如我们所要操作的数据集非常大,大到内存无法处理了怎么办?如数据库上千万记录的数据表、硬盘中上万个文件等。在这种情况下,对数据的处理需要不断的从硬盘等存储设备中调入或者调出内存页面。而过多的进行IO读写,显然会降低系统的效率。为了降低对外存的访问次数,我们就需要新的数据结构来处理这样的问题。2、2-3树
2012-09-11 22:40:45 4553
原创 图论----最短路径
1、Floyd算法 原理:图中任意两点之间的最短距离等于两点之间的直接距离和经过其他中间节点的距离之和的最小距离,即D[i][j] = min{ D[i][j] , D[i][k] + D[k][j] },Floyd通常用来求所有顶点到所有顶点的最短路径。代码如下:#include "stdafx.h"#include #include #pragma warn
2012-09-11 22:39:37 870
原创 图论----深度优先遍历和广度优先遍历
1、广度优先遍历原理: 广度优先遍历从某个顶点v出发,首先访问这个结点,并将其标记为已访问过; 然后顺序访问结点v的所有未被访问的邻接点{vi,..,vj},并将其标记为已访问过; 然后将{vi,...,vj}中的每一个节点重复节点v的访问方法,直到所有结点都被访问完为止。具体代码实现时: 我们可以使用一个辅助队列q,
2012-09-09 17:25:26 3672
原创 排序----快速排序
1、快速排序思想:选取基准元素,将数组分成两个子数组,其中一个数组里面的元素都比基准元素大,而另一个数组元素都比基准元素小。然后递归调用快速排序对这两个子数组进行排序。代码://快速排序//输入数组a,数组起始位置start(初始值0),结束位置end(初始值n-1)void QuickSort(int *a,int start,int end){ int i=start,
2012-09-07 23:54:56 831
原创 排序----堆排序
1、堆数据结构 堆数据结构:是一种数组对象。它可以视为一个完全二叉树,数中的每个节点和数组的每个元素一一对应。 最大根堆:堆中最大值存放在根节点中。并且以某一节点为根的子树中,各节点的值都不大于该子树根结点的值。2、维护堆的性质 我们假设某一节点A[i],以A[i]的左孩子A[LEFT[i]]和右孩子A[RIGHT[i]]为根的两棵子树都是
2012-09-07 23:28:15 748
原创 圆圈中最后剩下的数字----Joseph环
圆圈中最后剩下的数字 n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。 分析1:很容易想到用循环链表。我们可以创建一个总共有n个数字的循环链表(不带头节点),然后每次从这个列
2012-09-07 16:26:00 3465
原创 栈的push、pop序列
栈的push、pop序列 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,pu
2012-09-07 16:24:59 1445
原创 统计在从1到n的正整数中1出现的次数
统计在从1到n的正整数中1出现的次数1、最直观的想法,求1到n中每个整数中1出现的次数,然后相加即可。而求每个十进制整数中1出现的次数,我们先判断这个数的个位数是否是1,如果这个数大于10,除以10之后再判断个位数是否为1,循环直至求出该整数包含1的个数。代码如下:#include "stdafx.h"#include "stdlib.h"#include #include
2012-09-07 16:23:36 14187 10
原创 多线程经典面试题
1、基本概念 详见:线程和进程关系和区别、同步和互斥、进程间通信2、以下多线程对int型变量x的操作,哪几个不需要进行同步(D) A. x=y; B. x++; C. ++x; D. x=1; 详见:多线程二 多线程中的隐蔽问题揭秘3、多线程中栈与堆是公有的还是私有的 (C) A:栈公有, 堆私有
2012-09-05 23:17:39 64618 8
原创 探索1+2+…+n的不同求解方法?
题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。 思路:通常求1+2+…+n除了用公式n(n+1)/2之外,无外乎循环和递归两种思路。1、利用&&的短路性质,使用递归int add_fun(int n){ int sum=0; n && (sum=add_fun(n-
2012-09-05 17:52:01 2567
原创 SQL常见语句大全
----------------------------------------------------------基本--------------------------------------------------------------1、SELECT(选取) SELECT * FROM Persons WHERE firstname='Thomas' OR lastname
2012-09-05 12:48:33 1031
原创 探索Fibonacci数列的最佳求解方法
1、定义Fibonacci数列如下: / 0 n=0 f(n) = 1 n=1 \ f(n-1)+f(n-2) n=2输入n,用最快的方法求该数列的第n项。 分析:在很多C语言教科书中讲到递归函数的
2012-09-04 21:28:09 1729 1
原创 计算机网络基础知识 四
1、计算机网络与分布式计算机系统之间的区别与联系是什么? 两者在物理结构上是非常类似的,但是软件上有很大的差异。主要表现为: 1) 计算机网络以计算机网络通信和共享资源为主要目的,各计算机独立工作,向用户呈现分散系统。 2) 分布式系统以提高整体性能为主要目的,强调多计算机系统的整体性,各计算机协调自治工作,向用户呈现整体系统2、什么是交换?比较
2012-09-04 10:43:44 5951
原创 计算机网络基础知识 三
1、是什么原因使以太网有一个最小帧长和最大帧长? 设置最小帧长是为了区分开噪声和因发生碰撞而异常中止的短帧。 设置最大帧长是为了保证个站都能公平竞争接入到以太网。因为如果某个站发送特长的数据帧,它会长时间的占用信道,则其他的站就必须等待很长的时间才能发送数据。2、在以太网中发生了碰撞是否说明这时出现了某种故障? 以太网中发生碰撞是很正常的现象。发
2012-09-04 10:42:47 5108
原创 计算机网络基础知识 二
1、试说明运输层在协议栈中的地位和作用,运输层的通信和网络层的通信有什么重要区别?为什么运输层是必不可少的? 运输层处于面向通信部分的最高层,同时也是用户功能中的最低层,向它上面的应用层提供服务 运输层为应用进程之间提供端到端的逻辑通信,但网络层是为主机之间提供逻辑通信。 各种应用进程之间通信需要“可靠或尽力而为”的两类服务质量,必须由运输层以复用和
2012-09-04 10:42:24 7170
原创 计算机网络基础知识 一
1、 试从多个方面比较电路交换、报文交换和分组交换的主要优缺点。 电路交换电路交换就是计算机终端之间通信时,一方发起呼叫,独占一条物理线路。当交换机完成接续,对方收到发起端的信号,双方即可进行通信。在整个通信过程中双方一直占用该电路。它的特点是实时性强,时延小,交换设备成本较低。但同时也带来线路利用率低,电路接续时间长,通信效率低,不同类型终端用户之间不能通信等缺点。电路交换比较
2012-09-04 10:41:51 4565
转载 精选微软等公司数据结构+算法面试100题带答案(86-90)
86、怎样编写一个程序,把一个有序整数数组放到二叉树中? 分析:本题考察二叉搜索树的建树方法,简单的递归结构。关于树的算法设计一定要联想到递归,因为树本身就是递归的定义。而学会把递归改称非递归也是一种必要的技术。毕竟,递归会造成栈溢出,关于系统底层的程序中不到非不得以最好不要用。但是对某些数学问题,就一定要学会用递归去解决。struct BTree{ int data;
2012-09-03 15:22:33 2208
转载 精选微软等公司数据结构+算法面试100题带答案(81-85)
81、第1组百度面试题1)一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。 分析:有题目知,因为满足条件的a[i],其左边所有的数都小于等于它,右边所有的数都大于等于它,所以该数在数组中相当于已经排好序了。所以我们只需要将排好序的数组与原始数组相比,同一下标对应元素值相同
2012-09-03 10:34:12 3290 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人