
算法与数据结构
熊小楚
这个作者很懒,什么都没留下…
展开
-
1.4 逆序一个栈
题目:一个栈依次压入12345,实现栈中元素逆序解法一:开辟了一个新的栈作为辅助栈,将原栈中的元素依次弹出并压入到辅助栈中,最后返回辅助栈。//逆序一个栈 stack<int> reverseStack(stack<int> stackData){ //辅助栈 stack<int> temp; while(!stackData.empty()){ t原创 2017-05-04 19:03:31 · 469 阅读 · 0 评论 -
最长公共子序列 与 最长公共子串
1. 问题描述最长公共子序列:常用于解决字符串的相似度,是指在母串中都出现过并且出现顺序与母串保持一致的子串,不要求连续性。 最长公共子串:是指在母串中连续出现的子串。例如: cnblogs belong 最长公共子序列为blog,最长公共子串为lo2. 动态规划——最长公共子序列假设Z=<z1,z2,⋯,zk>Z=<z_1,z_2,⋯,z_k>是母串 XX 与 YY 的最长公共子序列LCS原创 2017-06-23 15:56:44 · 479 阅读 · 0 评论 -
STL—string
同时转载另一篇《string类成员函数详解》 导入头文件 #include <string>,标准库string类型表示可变长的字符序列。1、定义和初始化string s1; //默认初始化,s1为空串string s2(s1); //将s2初始化为s1的一个副本string s2 = s1; //同上string s3("val"); //将s3初始化一个字原创 2017-04-10 17:30:28 · 222 阅读 · 0 评论 -
常用排序算法总结(插入、冒泡、选择、希尔、快速、归并、堆)
插入排序 冒泡排序 选择排序 希尔排序 快速排序 归并排序 堆排序原创 2017-06-08 16:47:47 · 624 阅读 · 0 评论 -
1.3 设计一个有getMin功能的栈
题目:实现一个特殊的栈,在栈的基本功能上,实现返回栈中最小值的操作。思路:使用两个栈,stackData存放当前栈中元素,功能与普通栈没有区别。stackMin存放每一步的最小值,若当前压栈的数据小于等于stackMin的栈顶元素,就将这个数据入栈到stackMin中。class myStack { public: myStack(); virtual ~my原创 2017-04-27 14:31:31 · 398 阅读 · 0 评论 -
1.2 用两个队列实现一个栈
a是专职进出栈的,b只是个中转站。元素集中存放在一个栈中,但不是指定(a 或 b)。#include <iostream> #include <queue>using namespace std;//入栈操作 void pushQueue(queue<int> &a, queue<int> &b, int num) { if(!a.empty()) //若队列a不为空原创 2017-01-11 20:59:39 · 346 阅读 · 0 评论 -
1.1 用两个栈实现一个队列
假设两个栈A和B,且都为空。 可以认为栈A提供入队列的功能,栈B提供出队列的功能。 入队列:入栈A。 出队列: ● 如果栈B不为空,直接弹出栈B的数据。 ● 如果栈B为空,则依次弹出栈A的数据,放入栈B中,再弹出栈B的数据。#include <iostream> #include <stack>using namespace std;//入队操作 void pushQueue(stack<原创 2017-01-11 20:36:33 · 279 阅读 · 0 评论 -
求二叉树中结点值的和为指定整数的所有路径
题目输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。class Solution { public: vector<vector<int> >all; vector<int> temp; void dfsFind(TreeNode *root, int sum){ tem原创 2017-05-25 14:18:10 · 646 阅读 · 0 评论 -
满二叉树中任意两个结点的公共祖先
题目有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b,求出a和b点的最近公共祖先的编号。分析满二叉树的子节点与父节点之间的关系为root = child / 2 ,如果a != b,就让其中的较大数除以2, 如此循环直到a == b, 即是原来两个数的最近公共祖先。class LCA { public: int getLCA(int a,原创 2017-05-25 11:02:50 · 589 阅读 · 0 评论 -
输出二叉树中中序遍历中给定结点的下一个结点
题目输出二叉树中指定结点的下一个结点(即中序遍历的后继)。给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值,若不存在后继返回-1。分析中序遍历的非递归写法。第一步:中序遍历的非递归 BTNode* p = root; stack<BTNode*> s; while (!s.empty() || p) {原创 2017-05-25 10:44:53 · 743 阅读 · 0 评论 -
输出二叉树某一层的所有结点
题目:给定二叉树的根结点指针以及链表上结点的深度,返回一个链表,代表该深度上从左往右所有结点的值。方法递归遍历,刚开始为深度为dep,每往下递归一层,则深度减1,当深度为1的时候,便输出那个元素,如果先递归左子树,那么则实现从左到右打印,如果先递归右子树,则实现从右往左打印。struct TreeNode { int val; struct TreeNode *left; s原创 2017-05-24 17:24:42 · 3894 阅读 · 0 评论 -
二叉查找树的判断
题目:给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。方法一二叉查找树中序遍历后的结果是有序的,根据这个结果,可以中序遍历二叉树,并把遍历结果存放在一个数组里面,然后判断这个数组大小是否是有序数组,如果是有序数组,则是二叉查找树,否则就不是。时间复杂度是O(N),空间复杂度O(N)。class Checker { public: vector<i原创 2017-05-24 17:19:56 · 619 阅读 · 0 评论 -
改进版---字符串中数字子串的求和
【题目】 给定一个字符串str,求其中全部数字串所代表的数字之和。 【原始要求】 1、忽略小数点字符,例如"A1.3",其中包含两个数字1和3。 2、如果紧贴数字子串的左侧出现字符’-‘,当连续出现的数量为奇数时,则数字为负数,连续出现的数量为偶数时,则数字为正数。例如,”A-1BC–12”,其中包含数字是-1和12。 【新增要求】 1、考虑这种情况,”-12-a-2c—原创 2017-06-13 18:20:14 · 492 阅读 · 0 评论