算法问题
青春不谢
目前主要从事linux应用层相关的开发,接触了一点前端的内容
展开
-
打印一个集合的幂集C++实现
问题:打印一个集合的幂集?分析:可自行百度幂集的定义,简单点说就是打印一个集合(此处用英文字母代替)的所有子集(包括空集)。例如:集合 {A,B,C}的幂集为ABC, AB#, A#C, A##, #BC, #B#, ##C, ###, 其中#表示空之前去一家公司面试的时候碰到的一道题,当时也想到了应该用递归,不过细节没考虑好,导致当时很囧地做不出来。回来之后花了10分钟写一个,不原创 2015-09-01 18:02:53 · 2822 阅读 · 0 评论 -
LeetCode: 9. Palindrome Number
求一个整数是否是回文数。 形如121, 73637等等之类的数都是回文数。要求空间复杂度为O(1),这就让很多想转换为字符串再去判断的同学止步了;有的同学可能想把该整数倒转之后再去和原数比较是否相等,但是倒转后的数可能超过有符号整数范围,比如2147483647,倒转之后是7463847412,显然不合法。 我的思路是这样的:逐个去掉该整数的最后一位,将去掉的一位作为新整数的最高位;一边“砍掉”原创 2016-02-24 15:04:21 · 660 阅读 · 0 评论 -
华为经典面试题---大数乘法的c++实现
32位机器上的最大有符号数为2147483647,最大无符号数是4294967295。这对于实际的计算显然是不够的,于是就产生了大数乘法的需求。其思路不算难,按照我们平时计算两个数的乘积的流程就行了。如果你使用的是c语言等不能动态扩展数组的语言,有一个需要考虑的问题是:两数相乘后的位数为多少?这需要一点点的数学知识,两数乘积的位数不大于两数的位数之和。所以需要提前分配好足够的空间。我这里使用c++来原创 2016-02-24 10:44:52 · 3940 阅读 · 0 评论 -
Trie树的c++实现
关于Trie树的理论的东西,各位大神都已经说得很多了。参见这里是Trie树的简单介绍或者这里是它和其他一些树结构的使用场景。 Trie树又称“字典树”或“前缀树”,常见于小规模地统计词频,典型的用空间换时间。下面是我的一种c++实现,记录一下。 trie.h头文件#ifndef _TRIE_STRUCTURE_H#define _TRIE_STRUCTURE_H#include <string原创 2016-02-18 19:56:09 · 964 阅读 · 0 评论 -
LeetCode: 113. Path Sum II
这道题折磨了我好长时间,终于通过了所有test。语言c++,时间16ms。成就感能让我继续努力,所以记录一下。题目在这里Path Sum II,题目的意思是定义从二叉树的根结点到叶子结点为一条路径,将路径上所有结点的值加起来是该路径的和(path sum),现在给定一个整数,求出所有路径和等于该数的路径,结果保存在二维数组中。思路一:递归。与二叉树有关的大部分问题都可以用递归来处理,当问题规模不大时原创 2016-02-17 21:44:35 · 852 阅读 · 0 评论 -
求二叉树的每个结点的子孙数量
《数据结构》严蔚敏版习题6.55 为二叉链表的结点增加DescNum域,表示该结点的子孙数量。编写一个算法,求二叉树的每个结点的子孙数目并存入其DescNum域。思路:方案1,利用递归,从根节点开始对每个结点都调用一次函数来求每个节点的子孙数量 很明显递归调用肯定很慢,因为要不断地压栈弹栈。方案2,与方案1的遍历方向相反,从最下面的叶子结点开始计算每个结点的子孙数量,然后对于其双亲节点,原创 2016-01-26 17:42:35 · 6338 阅读 · 1 评论 -
求任意一颗二叉树的繁茂度
在《数据结构》严蔚敏版上的习题看到这个问题。 繁茂度的定义:各层节点数的最大值与树的高度的乘积 树的深度好求,递归调用就行了。关键在于如何求出各层的最大节点树?下面是我的一种实现方法: bitree.h#include <iostream>#include <cstdlib>#include <cstdio>#include <stack>using namespace std;typ原创 2016-01-23 18:42:37 · 4557 阅读 · 1 评论 -
N皇后问题的一般解法--回溯法
先上代码#include #include #include #include using namespace std;vector board;void ShowQueen(void){ for(unsigned int i = 0; i < board.size(); i++) { cout << "(" << i << "," << board[i] << ")原创 2015-09-07 19:31:10 · 1882 阅读 · 0 评论 -
循环缓冲区C++的一种实现
之前去腾讯面试的时候被问到的一道题目:实现一个循环缓冲区(不带互斥锁)。仔细一想,其实和循环队列的思想一模一样,还是怪自己数据结构没学好阿(其实我是学通信的,所以最近在恶补)。还是先上代码头文件如下,CircleBuffer.h#ifndef _CIRCLE_BUFFER_H_#define _CIRCLE_BUFFER_H_//basic data type renamety原创 2015-09-09 23:17:03 · 3190 阅读 · 1 评论 -
源码分析redis的有序集合,学习skiplist跳跃表数据结构
最近在看redis源码,看到跳跃表的插入操作时感觉很头大,网上各种文章都只是在进行一个原理性的分析,唯独这篇文章一行一行代码地讲解,非常仔细和透彻。希望能帮助正在阅读redis源码的你!文章地址源码分析redis的有序集合,学习skiplist跳跃表数据结构转载 2016-05-03 16:51:33 · 732 阅读 · 0 评论