![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题目
文章平均质量分 76
nothing is worse
long long ago,there is nothing
展开
-
删除双向循环列表的共同节点
第二章、删除双向循环列表的共同节点1、面试题目36、有双向循环链表结点定义为: struct node { int data; struct node *front,*next; }; 有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data 值相同的结点删除。2、解题方法原创 2013-06-17 22:38:28 · 850 阅读 · 0 评论 -
栈的push和pop 序列
#include #include #include using namespace std;#define NSIZ 1200//思路://模拟栈, 让栈顶元素和pop序列比较,若相等则出栈, 若不等则入栈//结果:若栈空,则是,非空则不是。int IsPushPop(int push[], int pop[], int n){int i原创 2013-08-25 21:08:08 · 866 阅读 · 0 评论 -
二叉树镜像
#include #include using namespace std;//根据前序遍历和中序遍历还原构造二叉树//判断二叉树A是否包含二叉树B//思路:1)首先遍历树A,找到一个节点值与B的根节点值相同// 2)再以步骤1)找到的节点值,开始比较树A的子树是包含树B//树的前序遍历int preOrder1[] = {10, 6,原创 2013-08-25 19:22:12 · 424 阅读 · 0 评论 -
线性时间复杂度求数组第n大
算法理论基础见《算法导论》的第9章#include #include using namespace std;#define NSIZ 1000int partision(int arr[], int left, int right){int tmp = arr[left];while(left {while(left arr[l原创 2013-08-24 22:37:15 · 550 阅读 · 0 评论 -
第三章 顺时针打印矩阵
第三章 顺时针打印矩阵1、面试题目38、顺时针打印矩阵 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9原创 2013-06-18 11:25:47 · 505 阅读 · 0 评论 -
编程之美-电话号码对应的英文单词
题意:电话号码盘一般可以用于输入字母,如用2可以输入A,B,C用3可以输入D,E,F等。对于电话号码5869782,可以依次输出其代表的所有字母组合,如:JTMWTPA,JTMWTPB,...总共有3 * 3 * 3 *4 * 3* 4 * 3 = 3888种#include #include #include #include using namespace std;原创 2013-09-19 16:24:52 · 832 阅读 · 0 评论 -
最大公约数-欧几米德,二进制方法
#include using namespace std;//方法1:欧几米德公式int gcd1(int a, int b){if (b == 0){return a;}return gcd1(b , a % b);}//方法2:若一个整数同时能被a, b整除,那么一定也能够同时能被a-b,b整除//即gcd(a, b) = gcd原创 2013-09-16 22:10:48 · 1160 阅读 · 0 评论 -
判断二叉树是否包含另一棵二叉树或者树的子结构
#include #include using namespace std;//根据前序遍历和中序遍历还原构造二叉树//判断二叉树A是否包含二叉树B//思路:1)首先遍历树A,找到一个节点值与B的根节点值相同// 2)再以步骤1)找到的节点值,开始比较树A的子树是包含树B//树的前序遍历int preOrder1[] = {8, 8, 9原创 2013-08-25 17:05:28 · 1030 阅读 · 0 评论 -
最长递减子序列
最长递减子序列1、面试题目求一个数组的最长递减子序列比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5, 4,3,2}2、解题方法:采用动态规划解决题目Ø 最长公共子序列方法解决Ø 直接根据动态转移方程解决2.1最长公共子序列方法2.1.1原理设原来数组为X[1..n],而数组Y[1…n]为数组X[]的非递增序列,现在我们求X[1…n],Y[1原创 2013-06-09 18:26:04 · 2457 阅读 · 0 评论 -
前序和中序重建二叉树, 树的前序递归,中序递归,后序递归遍历和前序非递归,中序非递归,后序非递归遍历
#include #include using namespace std;int preOrder[] = {10, 6, 4, 8, 14, 12, 16};int inOrder[] = {4, 6, 8, 10, 12, 14, 16};typedef struct Node_{Node_ * left, * right;int data;原创 2013-08-24 19:55:07 · 471 阅读 · 0 评论 -
寻找数组中的最大值和最小值
//思路来自编程之美上,留个纪念吧//比较次数:1.5N -2//思路:先求左边部分,再求右边部分的最大值和最小值、//#include using namespace std;typedef struct Value_{ int max, min;}Value;Value getMaxMin(int arr[], int left, int right){ if原创 2013-09-23 18:16:15 · 645 阅读 · 0 评论 -
单向链表相交的第一个公共结点, 判断链表是否有环以及环的入口节点
//////题目:两个单向链表,找出它们的第一个公共结点。////////////链表的结点定义为:////////////struct ListNode////////////{//////////// int m_nKey;//////////// ListNode* m_pNext;////////////}原创 2013-06-12 22:21:13 · 688 阅读 · 0 评论 -
树的子结构遍历
思路:1.在原数中进行遍历每个节点,查看该节点值是否和给定子树节点值相同,若相同则比较比较子结构 1)若子结构相同,则返回 2)若子结构不相同,则继续比较原树中根节点和给定子树根节点值。2.遍历直到整个原树中所有节点都被遍历过,或者找到给定子树的子结构#include using namespace std;int preOrder[] = {10, 6, 4, 8,原创 2013-09-26 14:12:20 · 627 阅读 · 0 评论 -
颠倒栈中元素--栈的逆置
思路:1.使用递归pop出栈中元素,直到栈中元素只剩下一个元素2.当前第一次递归返回的时候,栈中有2个元素,我们再利用另一个递归函数putItem把两个元素逆置3.以此递归下去,直到栈中元素全部逆置。过程如下1)1 , 2, 3, 4 第一个递归不断出栈,第一次满足返回条件时,栈中元素只有 12)回到第一个递归的上一层,利用putItem把 2 压入栈中,当putItem返原创 2013-09-26 11:58:51 · 6791 阅读 · 1 评论 -
判断某数组是不是某二元查找树的后序遍历的结果
//////题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。//////如果是返回true,否则返回false。//////例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果.////// 8////// / \////// 6 10////// / \ / \////// 5 7原创 2013-08-25 22:56:12 · 571 阅读 · 0 评论 -
重建二叉树和树的层次遍历
#include #include using namespace std;#define NSIZ 1000//利用队列的先进先出特性,从根节点开始入队,出队,输出节点值,左孩子不空,左孩子入队;右孩子不空,右孩子入队//循环直到队列为空;//树的前序遍历int preOrder1[] = {10, 6, 4, 8, 14, 12, 16};原创 2013-08-26 22:03:06 · 544 阅读 · 0 评论 -
1到n中1的个数
读《剑指Offer》有感,记下下面内容以备忘记:#include#include#includeusingnamespace std;#define NSIZ 50010#define WS 100 //nlogn算法int getSumNlgN(int n){int i ,原创 2013-09-12 11:37:37 · 455 阅读 · 0 评论 -
寻找最近点对-分治法
1. 题意在 n>= 2的点的集合中寻找最近点对,最近点对是指通常意义下的欧几里得距离:即点p1(x1, y1), p2(x2, y2)之间的距离为sqrt((x1 - x2)^2 + (y1- y2)^2),当Q中有2点重合时,最近点对的距离是0;最简单的算法是暴力搜索,查看所有的O(n^2)个点对。现在利用分治法解决,其运行时间是T(n) = 2 T(n/2) + O(n),该算法原创 2013-09-18 10:50:52 · 972 阅读 · 0 评论 -
一个整数数组,长度为n,将其分为m份,使得各分的和相等
//题意://一个整数数组,长度为n,将其分为m份,使得各分的和相等//比如:{3,4,2,3,6}可以分成{3,2,4,3,6} m=1;或者 {3,6},{2,4,3} m=2;//{3,3},{2,4}{6} m=3,所以m最大值为3//思路:使用多重背包//首先遍历一次数组arr[n],把数组中最大值maxN和总和sum记录下来//那么可能的等分为m = sum /原创 2013-09-19 12:55:34 · 2151 阅读 · 0 评论 -
求子数组的最大乘积
题目:给定一个长度为N整形数组,只能用乘法不能用除法,计算任意N-1个数的组合中乘积最大的一组,并写出时间复杂度;#include #include #include using namespace std;#define NSIZ 10000int a[NSIZ];int pre[NSIZ]; //pre[i] = a[0] * a[1] * ..原创 2013-09-18 22:50:15 · 531 阅读 · 0 评论 -
有序数组转为二叉查找树
我们用递归方法遍历有序数组来建立二叉查找树,每次都把[left, right]中间的数看成根节点建树由于二叉查找树的中序遍历是有序的,所以我们用中序遍历二叉查找树时,可以获得数组是有序的,那么确定数组是有序的。#include usingnamespace std; int arr[] = {1, 2, 3, 4, 5, 6}; typedef原创 2013-09-16 18:40:02 · 1088 阅读 · 0 评论 -
不用加减乘除做加法
阅读《剑指offer》有感,写下一下code纪念一下,#includeusingnamespace std;//不用加减乘除做加法//使用位运算,比如:5 二进制是101,17的二进制是10001//相加运算分成3步;//1)两数相加不计进位得到一个结果,即sum = 5 ^ 7//2)第二步求出两数相加的进位,即carry = (5 & 7) //原创 2013-09-05 14:43:01 · 550 阅读 · 0 评论 -
二叉树的路径和为给定数值的所有路径
#include#includeusingnamespace std;int preOrder[] = {1, 2, 4, 5, 7};int inOrder[] = {4, 2, 5, 1, 7};typedefstruct Node_{int data;Node_ * left, * right;原创 2013-08-27 11:16:20 · 616 阅读 · 0 评论 -
C++ 类初始化列表的成员初始化顺序
#include using namespace std; class A{private : int n1, n2;public: A():n2(0),n1(n2 + 2) { } void print() { cout"n1:""n2:原创 2013-08-27 17:15:37 · 741 阅读 · 0 评论 -
有序数组(升序)转换为二叉排序树
#includeusingnamespace std;int arr[] = {1, 2, 3, 4, 5, 6};typedefstruct Node_{int data;Node_ *left, * right;}Node;//将有序数组arr转换为二叉排序树void Convert(Node *原创 2013-08-27 17:46:16 · 1244 阅读 · 0 评论 -
归并排序求数组逆序对
第四章 逆序对4.1 题目在数组中的两个数字如果前面的一个数字大于后面的数字,则这两个数字组成了一个逆序对;输入一个数组求该数组中的逆序对个数比如:数组{ 1, 5, 7, 3, 2},则逆序对个数为5个,分别是[5, 3],[5,2],[7,3],[7,2],[3,2];4.2 解题方法由于归并排序过程是稳定排序的,即归并排序过程不会影响数组元素的相对位置,并且在归并排序过程原创 2013-08-28 11:20:45 · 707 阅读 · 0 评论 -
有序数组中数字出现次数
#include using namespace std;#define NSIZ 100//题目:统计有序数组中排序某一个数出现的次数//比如:{1, 2,2,2,3 ,4 , 5}中,2出现了3次,3出现了0次//思路://利用二分查找,找到某一个数在数组中出现的第一个下标firstIndex和最后一个下标lastIndex//出现次数就是:原创 2013-08-28 15:46:47 · 536 阅读 · 0 评论 -
二叉树转换为双向链表
#include #include using namespace std;//根据前序遍历和中序遍历还原构造二叉树//思路:1)开始时双向循环链表为空,第一个节点应该为最左边的节点// 2)中序遍历二叉树,将输出的每个节点加到新创建的双向链表的末尾//树的前序遍历int preOrder1[] = {10, 6, 4, 8, 14, 12,原创 2013-08-29 18:51:27 · 504 阅读 · 0 评论 -
KMP-删除字符串中给定的字符串
#includeusingnamespace std;#define NSIZ 1000int Next[NSIZ];char str1[NSIZ];char str2[NSIZ];void getNext(char str[], int n){if (!str || !n){ret原创 2013-09-03 11:06:26 · 618 阅读 · 0 评论 -
罗马数字转换为十进制数
//例子:罗马数字和十进制例子////I - 1 //II - 2 //III - 3 //IV - 4 //V – 5 //VI - 6 //VII – 7 //VIII - 8 //IX - 9 //X – 10 //XI – 11 //XII – 12 //XIII – 13 //XIV – 14 //XV – 15 //XVI原创 2013-09-26 11:38:55 · 1880 阅读 · 0 评论