算法数据结构面试100题
文章平均质量分 59
FelixTT
这个作者很懒,什么都没留下…
展开
-
输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
思路设置一个头指针begin, 一个尾指针end。若首尾元素的和 正好是输入那个数,则输出它们。若首尾元素和>输入那个数则,--end。若首尾元素和#include using namespace std;//在m数组中查找和为sum的两个数,并将其输出void FindNumber(int m[], int len, int sum){ int begin = 0; /原创 2012-11-04 15:25:20 · 811 阅读 · 1 评论 -
求子数组的最大和
方法1:找出所有子数组,计算每个子数组的和,并返回最大值。#include using namespace std;//值最大的子树组int MaxSubArrayValue(int *num, int len){ int sum = 0; int max = -1<<31;//max初始值为一个最小负值 for (int i = 0; i < len; ++i) {原创 2012-11-14 10:22:21 · 480 阅读 · 0 评论 -
第25题: 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr),在字符串中找出连续最长的数字串,并把这个串的长度返回
功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,outputstr所指的值为123456789#include using namespace std;int continumax(cha原创 2012-11-27 12:35:07 · 597 阅读 · 0 评论 -
第18题: 题目:n个数字(0,1,„,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下
#include using namespace std;typedef struct tagNode{ tagNode *pNext; int data;}Node;//创建有n个结点的循环链表Node *CreateLoopList(int n){ Node *head = NULL; Node *tail = NULL; Node *temp = NULL;原创 2012-11-07 16:59:06 · 1307 阅读 · 0 评论 -
第20题: 题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。 例如输入字符串"345",则输出整数345。
#include using namespace std;//将数字字符串转换成数值型int StringToNumber(char *pszStr){ if (NULL == pszStr) { return 0; } int nLen = strlen(pszStr); int sum = 0; int i = 0; while (nLen--) { sum原创 2012-11-07 17:34:28 · 2774 阅读 · 0 评论 -
输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
声明:算法数据结构面试100题系列题目来自于:http://blog.csdn.net/v_JULY_v/article/details/6057286//输出倒数第k个结点的值#include using namespace std;typedef struct tagNode{ tagNode *pNext; int data;}Node;/* * 核心代原创 2012-11-03 20:32:21 · 952 阅读 · 0 评论 -
第7题 微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交,并找出第一个相交结点。
思路1.判断两链表是否相交可以用两个指针,p1End, p2End,分别指向链表h1, h2的最后一个结点。如果p1End = p2End说明两链表相交。2.找出相交的第一个结点可以先求得链表h1, h2的长度之差的绝对值sub, 将较长的那个链表向后移动sub个位置后。从两链表的当前位置开始一直往后比较,第一个相等的结点即是第一个相交结点。#include using na原创 2012-11-07 15:30:26 · 1372 阅读 · 0 评论 -
在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
思路一个字符占8位,那么它最多可以表示256种字符。因为每个字符都有一个ASCII码,所以可以定义一个用于记录字符出现次数的数组,用字符的ASCII码做为数组的下标,当遍历字符串时,就给相应下标对应的字符次数加1。这样对字符串的一次遍历就能记录每个字符出现的次数。再按字符的出现顺序,输出第一个出现次数为1的字符。#include using namespace std;//在字符原创 2012-11-05 16:05:46 · 877 阅读 · 0 评论 -
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
思路可以借助队列来实现,因为队列的特性是先进先出。可以从根结点,左结点,右结点依次入队列。然后再逐一输队首结点的值,即实现层次遍历。#include #include using namespace std;//二叉树结构typedef struct BinaryTreeNode { char m_chValue; BinaryTreeNode *m_pLChild;原创 2012-11-05 11:21:37 · 969 阅读 · 0 评论 -
将矩阵右旋转90度
#include using namespace std;int main(){ int m[3][2] = {1, 2, 3, 4, 5, 6}; int n[2][3]; //右旋转 for (int i = 0; i < 2; ++i) { for (int j = 0; j < 3; ++j) { n[i][j] = m[2 - j][i]; } }原创 2012-11-04 15:39:45 · 613 阅读 · 0 评论 -
输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
#include #include using namespace std;//二叉树结构typedef struct BinaryTreeNode { char m_chValue; BinaryTreeNode *m_pLChild; BinaryTreeNode *m_pRChild;}BiTree;//递归方式将树镜像void BSTreeMirrored(B原创 2012-11-04 17:23:28 · 519 阅读 · 0 评论 -
求二叉树中节点的最大距离
#include using namespace std;//二叉树结构typedef struct BinaryTreeNode { char m_chValue; BinaryTreeNode *m_pLChild; BinaryTreeNode *m_pRChild;}BiTree; //求树的深度int depth(BiTree *T) { if(!T)原创 2012-11-03 21:01:58 · 458 阅读 · 0 评论 -
4.在二元树中找出和为某一值的所有路径 题目:输入一个整数和一棵二元树。 从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。
思路:相当于一个先序遍历,把路径上的值都放入arr数组。当前节点是叶节占时,判断路径上节点的和是否与待求值相等。相等则输出路径。#include #define MAX_SIZE 200using namespace std;//二叉树结构typedef struct BinaryTreeNode { int m_chValue; BinaryTreeNode原创 2012-11-20 18:15:59 · 1888 阅读 · 0 评论