- 博客(12)
- 资源 (7)
- 收藏
- 关注
原创 青蛙跳台阶问题
使用01 问题的类似解法解了一下, 可以求出跳台阶的方法, 以及总共的次数., 不过网上搜了一下, 发现原来是用数学归纳法, 推出递归公式, 然后递归求解,以下是01问题的思路的解决方法:#include #include void helper(int data[], int left, int right, int sum);int main
2016-07-19 20:42:25 403
原创 左旋转字符串
例如把字符串"abcdef"左旋转2位 变成 "cdefab", 要求时间复杂度 为O(n), 空间复杂度为O(1)如果没有时间复杂度和空间复杂度要求那就非常简单, 有许多办法, 但是要满足题目要求, 方法就相对更少.一. 翻转字符串 3次, 就可以. 比如 首先 翻转 前面 2位, 变成 "bacdef", 再翻转后面4位变成"bafedc", 最后整体翻转, 变成"cdefa
2016-07-19 16:59:19 286
原创 输入两个整数n 和 m, 从数列1, 2, 3, ..., n中随意取几个数, 使其和等于m, 要求将所有组合列出来
本题的关键在随意取几个数, 因此和以前解过的true or false问题思路一样.网上一搜才发现这是一类问题, 称01背包问题我们可以使用递归来列举出所有的排列组合情况,共有2的n次方中情况, 然后筛选其中和为m的排列, 将其打印出来即可.这n个数中, 每一个数都有选取和不选取两种情况, 比如第一个数如果选取, 那么剩余的9 个元素其和应该为m -1, 如果第一个数不选取,
2016-07-12 15:43:12 1302
原创 输入一个表示整数的字符串, 把该字符串转换成整数并输出
//把字符串转换成整数//需要考虑正负, 非法数字, 溢出等情况#include #include #include #include #define N 30int my_atoi(const char * str);int main(void){int result;char data[N];char * p = data;
2016-07-11 15:29:36 4376
原创 在一个字符串中找到第一个只出现一次的字符
首先想到的方法是从第一个字符开始遍历字符, 每个字符在遍历后序字符判断是否有重复的, 没有就说明找到结果, 为了提高效率, 我设置了一个数组用来标记重复的数组.但是还是不如其它博客上看到的效率高.#define N 100char findch(char * str){int i, j;int length = strlen(str);int mark[N] =
2016-07-08 15:24:58 644
转载 C语言从stdin读取一行字符串的几种方法
C语言从stdin读取一行字符串的几种方法getsgets函数的头文件是,原型如下:char *gets(char *s);gets从stdin中读入一行内容到s指定的buffer中,当遇到换行符或EOF时读取结束。读取成功时,返回s地址;失败时返回null。需要注意的是,gets会将行末尾的'\n'字符或EOF替换成'\0',这样,gets读取的内
2016-07-07 17:22:28 8496
原创 输入一个整数和一棵二元树,打印出所有和为该整数的二元树中的路径
从根节点到叶子节点经过的所有节点为一个路径.//path 用于保存路径void findPath(BinaryTreeNode * root, int target, int n, int path[]){ if(!root)return ;target -= root->m_nValues;path[n++] = root->m_nValues;if(ta
2016-07-07 16:29:45 1312 2
原创 判断一个数组是不是二元查找树后序遍历的结果
最主要是要知道后序遍历的特点1. 数组最后一个元素为根节点.2. 左子树所有节点在右子树的左边, 需要找出该分界点.//递归实现int isBTreee(int data[], int n){int root;int i;int lLen = 0;int right = 0;int bRet1 = 1, bRet2 = 1;if(n ==
2016-07-07 16:21:26 646
原创 输出单向链表倒数第k个节点,倒数第0个指向尾节点.
首先想到的是链表逆序, 然后输出第K个节点.还可以先计算链表中节点个数n, 倒数第0个, 就是顺数第n - 0 -1个.typedef struct ListNode{int m_nKey;struct ListNode * m_pNext;}ListNode;ListNode * retKNode(ListNode * list, in
2016-07-07 16:10:02 365
原创 输入一个已经按升序排序过的数组和一个数字
在数组中查找两个数, 使得他们的和正好等于输入的那个数字, 要求时间复杂度为O(n), 如果存在多对这样的数字只需要输出一对就可以.void findarray(int data[], int n, int sum){int left = 0;int right = n -1;while(left {if(data[left] + data[right] =
2016-07-07 16:01:40 3076
原创 输入一棵二元查找树, 将该树转换为它的镜像
要求使用递归和循环两种方法.二叉树节点定义:typedef struct BSTreeNode{int m_nValue;struct BSTreeNode * m_pLeft;struct BSTreeNode * m_pRight;}BSTreeNode;一.递归void reverseBTree(BSTreeNode * bst
2016-07-07 15:47:45 778
原创 用数组创建二叉树的一种方法
很多面试题都是二叉树相关的, 因此经常需要测试自己的写的程序, 那么创建二叉树就必不可少, 用数组中的值初始化二叉树是一种比较简单的方法.typedef struct BSTreeNode{int m_nValue;struct BSTreeNode * m_pLeft;struct BSTreeNode * m_pRight;}BSTreeNode;
2016-07-06 17:33:02 10751 1
汇编语言第三版
2018-05-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人