数据结构与简单算法
半路出家的开发狗
本科数学狗,硕士程序狗,第一份工作开发狗,要努力呀骚年
展开
-
斐波那契数列
问题描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。代码如下:class Solution {public: int Fibonacci(int n) { if(n==0) { return 0; } if(n==1) {原创 2015-09-25 07:41:19 · 352 阅读 · 0 评论 -
字符串搜索算法总结
因为在网上搜寻hash算法的知识,无意中又找到一些字符串搜索算法。 由于之前已经学习过一些搜索算法,觉得应该可以归为一类。因此就写一篇文章来记录下学习的过程。 问题: 在一长字符串中找出其是否包含某子字符串。 首先当然还是简单算法,通过遍历来检索所有的可能: public static int naiveSearch(String content, String sub)转载 2016-02-25 17:01:39 · 1377 阅读 · 0 评论 -
利用rand5()产生rand7().rand5()产生1到5的整数,rand7()产生1到7的整数.
利用rand5()产生的一个整数空间,然后将其映射到[1,7]的整数空间上,映射时保证概率相等,且等于1/7,下面介绍两个有意思的实现。1.利用预置数组 该方法简单,易理解,但是不具扩展性,需要额外存储空间.int rand7(){ int vals[5][5] = { {1,2,3,4,5}, {6,7,1,2,3},转载 2016-02-23 10:21:17 · 1010 阅读 · 0 评论 -
平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树。2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key。维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。与自平衡二转载 2016-02-23 00:44:28 · 359 阅读 · 0 评论 -
用两个栈实现队列
问题描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。代码如下:class Solution{public: /* *入队:将元素进栈1 *出队:判断栈2是否为空,如果为空,则将栈1中的所有元素pop,并push到栈2中,此时栈2依次出栈就可以完成出队操作 */ void push原创 2015-09-24 22:17:58 · 325 阅读 · 0 评论 -
剑指offer之替换空格问题
问题描述:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。代码:classSolution {public: voidreplaceSpace(char*str,intlength) { cha原创 2015-09-22 12:17:18 · 370 阅读 · 0 评论 -
二维数组中的查找问题
问题描述如下:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。class Solution {public: bool Find(vectorint> > array,int target) { int原创 2015-09-21 21:53:26 · 377 阅读 · 0 评论 -
常考面试题之重构一棵二叉树
问题描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * struct TreeNode { * int val; *原创 2015-09-22 22:11:44 · 597 阅读 · 0 评论 -
从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。代码如下,碰到链表逆序问题,先征求面试官是否可以使用递归的方式,一下为使用递归的方式逆序链表的代码/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :*原创 2015-09-22 21:09:57 · 442 阅读 · 0 评论 -
怎么理解 P 问题和 NP 问题?
最简单的解释:P:算起来很快的问题NP:算起来不一定快,但对于任何答案我们都可以快速的验证这个答案对不对NP-hard:比所有的NP问题都难的问题NP-complete:满足两点:1. 是NP hard的问题2. 是NP问题接下来是比较严谨的定义:问题:对于一个包含由0和1组成的字符串集合S,以某个01字符串x作为输入,要求某个图灵机判断x在不在S里面。这里的图转载 2016-10-04 18:50:02 · 1369 阅读 · 0 评论