`
u010815305
  • 浏览: 30157 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7 ...
#include<stdio.h> #include<stdlib.h> void swap(int* data1,int* data2) { int temp=*data1; *data1=*data2; *data2=temp; } int partition(int data[],int length,int start,int end)//基于Partition函数的O(n)算法 { if(data==NULL||length<=0||start<0||end>=length) return 0; i ...
转自:http://blog.csdn.net/ns_code/article/details/26405471 剑指offer上的拓展题目,输入一个字符串,输出该字符串的字符的所有组合,比如输入字符串:abc,输出a、b、c、ab、ac、bc、abc。 可以考虑求长度为n的字符串中m个字符的组合,设为C(n,m)。原问题的解即为C(n, 1), C(n, 2),...C(n, n)的总和。对于求C(n, m),从第一个字符开始扫描,每个字符有两种情况,要么被选中,要么不被选中,如果被选中,递归求解C(n-1, m-1)。如果未被选中,递归求解C(n-1, m)。不管哪种方式,n ...
题目: 输入一颗二叉搜素树,将该树转换成一个排序的双向链表.要求不能创建新的结点,只能 调整树中结点指针的指向. 思想: 10 / \ 6 4---------------->4==6==8==10==12==14==16 /\ /\ 4 8 12 16 我们可以中序遍历整棵树。按照这个方式遍历树,比较小的结点先访问。 如果我们每访问一个结点,假设之前访问过的结点已经调整成一个排序双向链表, 我们再把调整当前结点的指针将其链接到链表的末尾。当所有结点都访问过之后, 整棵树也就转换成一个排序双向链表了。 #include<stdio.h> #in ...
题目: 输入一个字符串,打印出该字符串中字符的所有排列 思想: 把一个字符串看成是两部分组成:第一部分为他的第一个字符,第二部分为后面所有的字符 首先求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换. 然后固定第一个字符,求后面所有字符的排列,仍把后面的所有字符分成两部分:后面字符 的第一个字符,以及这个字符后面的所有字符 最后把第一个字符逐一和后面的字符交换 #include<stdio.h> #include<stdlib.h> void permutation_ex(char* ,char*); void permu ...
题目:实现函数complextListNode* clone(ComplexListNoe* pHead),复制一个链表。 在复制链表中,每一个节点除了有一个m_pNext指针指向向下一个节点外,还有一个 指针m_pSibling指向链表中的任意节点或者NULL 节点定义如下: struct ComplexListNode { int m_nValue; ComplexLstNode* m_pNext; ComplexListNode* m_pSibling; }; 思想: 空间换时间。 第一步: 根据原始链表的每 ...
题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 输入: 每个测试案例包括n+1行: 第一行为2个整数n,k(1<=n<=10000),n表示结点的个数,k表示要求的路径和,结点编号从1到n。 接下来有n行。这n行中每行为3个整数vi,leftnode,rightnode,vi表示第i个结点的值,leftnode表示第i个结点的左孩子结点编号,rightnode表示第i个结点的右孩子结点编号,若无结点值为-1。编号为1的结点为根结点。 输出: 对应 ...
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 输入: 每个测试案例包括2行: 第一行为1个整数n(1<=n<=10000),表示数组的长度。 第二行包含n个整数,表示这个数组,数组中的数的范围是[0,100000000]。 输出: 对应每个测试案例,如果输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出No。 样例输入: 7 5 7 6 9 11 10 8 4 7 4 6 5 样例输出: Yes No ...
题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 输入: 输入可能包含多个测试样例,输入以EOF结束。 对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, :n代表将要输入的二叉 ...
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。 输入: 每个测试案例包括3行: 第一行为1个整数n(1<=n<=100000),表示序列的长度。 第二行包含n个整数,表示栈的压入顺序。 第三行包含n个整数,表示栈的弹出顺序。 输出: 对应每个测试案例,如果第二个序列是第一个序列的弹出序列输出Yes,否则输出No。 ...
题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 输入: 输入可能包含多个测试样例,输入以EOF结束。 对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数。 接下来有n行,每行开始有一个字母Ci。 Ci=’s’时,接下有一个数字k,代表将k压入栈。 Ci=’o’时,弹出栈顶元素。
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列。 接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1<=a<=10000)。 输出: 对应每 ...
题目: 请完成一个函数,输入 一个二叉树,该函数输出她的镜像。 求一棵树的镜像的过程: 先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换他的两个子结点,当交换完所有的非叶子节点的左右子结点之后,就 得到树的镜像。 #include<stdio.h> #include<stdlib.h> struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; }; void mirrorRecurs ...
题目: 输入两棵二叉树A和B,判断B是不是A的子结构。二叉树节点定义如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BInaryTreeNode* m_pRight; } 思路:首先在树A中找到和B的根结点的值一样的结点R,然后再判断树A中以R为根的子树是否包含树B一样的结构。 递归代码: #include<stdio.h> #include<stdlib.h> struct BinaryTreeNode ...
题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 (hint: 请务必使用链表。) 输入: 输入可能包含多个测试样例,输入以EOF结束。 对于每个测试案例,输入的第一行为两个整数n和m(0<=n<=1000, 0<=m<=1000):n代表将要输入的第一个链表的元素的个数,m代表将要输入的第二个链表的元素的个数。 下面一行包括n个数t(1<=t<=1000000):代表链表一中的元素。接下来一行包含m个元素,s(1<=t<=1000000)。 ...
Global site tag (gtag.js) - Google Analytics