数据结构
文章平均质量分 79
贰锤
这个作者很懒,什么都没留下…
展开
-
二叉树遍历与序列化
遍历A 先序遍历 中、左、右 递归方式: public void preOrderRecur(Node head){ if (head==null){ return; } System.out.print(head.value + " "); preOrderRecur(head.left); preOrderRecur(h原创 2018-02-14 20:38:59 · 455 阅读 · 0 评论 -
算法题4
1. 课程表 II现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。输入: 4, [[1,0],[2...原创 2018-11-09 11:02:52 · 524 阅读 · 0 评论 -
算法题3
1. 三角形最小路径和给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。分析:自下而上动态规划,建立一个大小为n的help矩阵,用来保存走到当前层各个位置的最短路径,然后一层层向上累积。int...原创 2018-11-09 11:01:35 · 406 阅读 · 0 评论 -
算法题2
1. 变态跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:f(n)=f(1)+f(2)+...+f(n−1)+1f(n)=f(1)+f(2)+...+f(n-1)+1f(n)=f(1)+f(2)+...+f(n−1)+12. 矩形覆盖我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形...原创 2018-11-09 11:00:20 · 897 阅读 · 0 评论 -
算法题
1.栈的压入与弹出。 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 分析:建立一个栈stack,i=0,依次放入,每一次放入与弹出序列arr[...原创 2018-11-09 10:55:38 · 609 阅读 · 0 评论 -
缓存淘汰算法-LRU算法
转载自:缓存淘汰算法-LRU算法 1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 1.2. 实现 最常见的实现是使用一个链表保存缓存数据,详细算法实现如下: ...转载 2018-04-27 09:32:17 · 454 阅读 · 0 评论 -
动态规划C++
引入题目给定数组arr,arr中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求还钱有多少种方法。 分析:可以使用,暴力搜索方法、记忆搜索方法、动态规划方法、状态继续简化后的动态规划方法。暴力搜索方法arr = {5,10,25,1},aim=1000. 1.用0张5元货币,让[10,25,1]组成剩下的1...原创 2018-11-09 10:56:46 · 3166 阅读 · 0 评论 -
二分搜索面试题C++
二分搜索的常见考察点对于边界条件的考察以及代码实现的能力,如果边界条件处理不当,可能会出现死循环或者漏掉某个数的情况。仔细设计中间划分点的逻辑判断以及循环的终止条件,防止出现循环永远不能终止的情况。在有序循环数组中进行二分搜索 循环数组是指,1,2,3,4,5的任意前部分放到数组后,例如,23451,34512,45123,51234.二分搜索的重要提醒一般的中点选取为mi...原创 2018-11-09 10:57:13 · 360 阅读 · 0 评论 -
各种排序算法详解C++实现
1.冒泡排序 时间复杂度O(n2)O(n2)O(n^2),空间复杂度O(1)O(1)O(1)。 a.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 b.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 c.针对所有的元素重复以上的步骤,除了最后一个。 d.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 若...原创 2018-10-24 20:07:32 · 2224 阅读 · 2 评论 -
KMP算法详解C++实现
KMP算法是判断两个字符串str1中是否包含与str2相同的子串。next数组概念KMP算法最关键的就是next数组。next数组就是针对str2串中每个字符前的子串中存在的前缀与后缀匹配的最长长度。假设str2为“abababca”。 j=0,字符str2[j]=a,a前没有字符串,默认为next[0]=-1; j=1,字符str2[j]=b,b前子串为“a”,前后缀不存在,默认...原创 2018-03-07 11:40:17 · 636 阅读 · 0 评论 -
字符串面试题C++
重要概念1.回文 2.子串(连续) 3.子序列(不连续) 4.前缀:指除了最后一个字符以外,一个字符串的全部头部组合。 5.后缀:指除了第一个字符以外,一个字符串的全部尾部组合。 - - - - - 例:”ABCDAB”的前缀为[A, AB, ABC, ABCD, ABCDA],后缀为[BCDAB, CDAB, DAB, AB, B],共有元素为”AB”,长度为2; 6.前缀树(T...原创 2018-11-09 10:57:09 · 2002 阅读 · 0 评论 -
队列与栈面试题C++
概念1.图的深度优先遍历(DFS) 可以用栈实现,从根结点开始沿左孩子到最深的节点压入栈中,然后依次弹出,若栈顶节点还有没有访问的孩子,则没访问过得孩子入栈直到最深的节点,然后再弹出。元素入栈顺序则为深度优先遍历顺序。 2.图的宽度优先遍历(BFS) 可以用队列实现,将根结点放入队列,每弹出一个节点,就将该节点的孩子全部放入队列,放入队列的顺序为宽度优先遍历顺序。示例一实现一...原创 2018-11-09 10:57:30 · 557 阅读 · 0 评论 -
链表面试题C++
注意头结点的处理,如果倒叙记得将新的尾节点指向空。示例一给定一个整数num,如何在节点值有序的链表中插入一个节点值为num的节点,并且保证这个单链表依然有序。#include<iostream>#include<thread>using std::endl;using std::cout;template&amp原创 2018-11-09 10:57:11 · 738 阅读 · 0 评论 -
卡特兰数公式
公式一Cn2n−Cn+12n=Cn2nn+1C2nn−C2nn+1=C2nnn+1C_{2n}^n - C_{2n}^{n+1} = \frac{C_{2n}^n }{n+1}题目一假设有n对左右括号,请求出合法的排列有多少个?合法是指每一个括号都可以找到与之配对的括号,比如n=1时,()是合法的,)(不合法。 分析:n对括号的排列共有Cn2nC2nnC_{2n}^n种,错误...原创 2018-11-09 10:56:53 · 429 阅读 · 0 评论 -
哈希函数、Map-Reduce与Hadoop
哈希函数哈希函数又叫散列函数,哈希函数的输入域可以是非常大的范围,比如任意字符串,但是输出域是固定范围,假设为s。 哈希函数的性质: 1. 典型的哈希函数都拥有无限的输入值域。 2. 输入值相同时,返回值相同,通常将返回值称为哈希值。 3. 输入值不同时,返回值可能相同,也可能不同。 4. 不同输入值得到的哈希值,整体均匀的分布在输出域s上。(重要) 性质1,2,3是哈希函数的基础...原创 2018-11-09 10:56:46 · 1004 阅读 · 0 评论 -
位运算基础与面试题C++
共有如下几种位运算 运算符 功能 用法 ~ 位取反 ~expr << 左移 expr1< >> 右移 expr1>>ex原创 2018-11-09 10:56:00 · 443 阅读 · 0 评论 -
算法面试中的逻辑题
1. 射影定理在直角三角形中,斜边上的高是两条直角边在斜边射影的比例中项,每一条直角边又是这条直角边在斜边上的射影和斜边的比例中项。BD2=AD∗DCAB2=AD∗ACBC2=CD∗ACBD^2=AD*DC\\AB^2=AD*AC\\BC^2=CD*ACBD2=AD∗DCAB2=AD∗ACBC2=CD∗AC2. 硬币生成等价事件取大于事件数的最小二进制数。0表示反,1表示正。然后...原创 2018-11-09 11:11:24 · 770 阅读 · 0 评论