- 博客(111)
- 资源 (14)
- 问答 (1)
- 收藏
- 关注

原创 【算法】Fibonacci解法总结
我这里说的Fibonacci数列不仅仅是f(n-1) + f(n-2)的情况,也可以是f(n-1) + f(n-2) + … + f(n-k)的情况。但是这里我们用f(n-1) + f(n-2)来进行讨论,简化理解,举一反三。解法一,递归实现非常简单。int fibonacci(int i){ if(i==0){ return 0; }else if(i==1){
2015-10-30 13:10:40
960

原创 【动态规划】最小硬币面值组合
问题给出硬币种类,及要组合的sum,求用最少的硬币数目到达sum。 如:硬币种类1,5,8 sum为20,则最少的硬币数目为5555。解析动态规划解法: dp[i]表示用N种硬币组合成i大小的最少硬币数目。 状态转移方程: dp[i] = min{dp[i-arr[j]] + 1 | 0<=j<=arr_len && arr[j]<=i , dp[i]}. dp[0] = 0;实现mems
2015-10-30 12:55:12
2560

原创 【动态规划】硬币面值组合(上台阶)
问题1分2分5分的硬币三种,组合成1角,共有多少种组合?有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱,有多少中组合可以组成n分钱?一个人上台阶可以一次上1个,2个,或者3个,问这个人上n层的台阶,总共有几种走法? 问法不一样,但是本质一样!解析实现总结
2015-10-30 12:41:18
8342
4

原创 【动态规划】交错重排
问题两个字符串,不改变原顺序,能否组成目标字符串。 eg: str1:ABC str2:123 aim:A12BC3、123ABC、1A2B3C、………解法动态规划解: dp[i][j]表示str1[0…i-1]和str2[0…j-1]能否组成aim[0…i+j-1]长度的字符串. 状态转移方程: dp[0][j] = str2[0…j] == aim[0…j] ? 1:0 dp[i
2015-10-29 21:06:31
535

原创 【动态规划】求二维数组走法路径种数
问题给定二维数组,从左上走到右下的走法种树,数组中1代表该格可以走,0代表不能走。且只能向下和向右走。解法典型的动态规划问题:dp[i][j]表示从[0][0]到[i][j]的走法数量。状态转移方程:dp[0][j] = 1 where i = 0dp[i][0] = 1 where j = 0dp[i][j] = dp[i-1][j] + dp[i][j-1] where arr[i]
2015-10-29 20:51:36
4435

原创 【结构之法】二叉树中节点的最大距离
前言:编程之美中的解法并不是最好的,所以这里给出大神的解法。问题:如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义”距离”为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。 思路计算一个二叉树的最大距离有两个情况:情况A: 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点。 情况B: 路径不穿过根节点,而是左子树或右子树的最大距离路径,
2015-10-16 12:49:39
664

原创 【算法】求n的m次方(快速幂取模)
题目求n的m次方,n,m均为自然数。解析看似简单的题目,但是要想写的高效还不是那么容易想出来。实现unsigned int power(unsigned int a, unsigned int n){ unsigned int i, s; if (!n) return 1; if(!a) return 0; i=n;s=a; while (i>>=1)//每
2015-10-14 22:49:32
9230
4

原创 【算法】九大排序算法总结
九大排序算法这里我不采用数组来进行排序,而是采用更加符合应用的数据结构来排序。这是一种简单描述,更加详细的数据机构应该是下面这样(但是为了方便描述还是使用上面的简单结构):
2015-10-12 12:07:47
766

原创 【数字之魅】寻找最大的K个数(求第k大的数)
前言:编程之美上并没有给出实际的代码,这里我参考yoona博主的做法自己也写了一遍,并记录下来。 与此相似的题目是: - 求第k大的数 - 求第k小的数 这里给出比较好的两个做法,分别是快排思想和堆思想。快排思想解堆思想解
2015-10-12 11:53:16
1776

原创 【动态规划】0-1背包问题
一、问题有N件物品和一个容量(最大承重)为V的背包。第i件物品的体积(重量)是w[i],价值是p[i]。求解将哪些物品装入背包可使价值总和最大。 所谓01背包,表示每一个物品只有一个,要么装入,要么不装入。二、分析0-1背包属于求最优解,当然用动态规划解决,当然也可以用其他方法解决。这里介绍动态规划方法。 阶段是:在前N件物品中,选取若干件物品放入背包中; 状态是:在前N件物品中,选取若干件物
2015-10-08 23:42:37
763

原创 【动态规划】最长递增子序列
题目:求一个无序数组中最长的递增子序列。例如: 1,3,2,5,4,6的最长递增子序列的长度是4。12446和1346。解析:直接给出动态规划的解,dp[i]表示以arr[i]结尾的最长递增子序列的长度。dp[0] = 1dp[i] = max{dp[0]...dp[i-1]} where arr[i] > arr[0...i-1] 代码:
2015-10-04 21:07:50
643

原创 【动态规划】求最长公共子串,最长回文子串
题目 : 给定两个字符串,求出它们之间连续的最长的相同子字符串的长度。 eg : fbaabe,ebaabf,连续最长子串长度为4。注意:求最长回文子串也可以用求最长公共子串来求,只需将字符串反转作为另外一个字符串,回文部分反转之后不变,然后求LCS(Longest common substring)即可。求最长公共子串通常两种方法:第一暴力,第二,动态规划。这里分别给出。1. ...
2015-09-30 20:46:54
792

原创 【动态规划】求最长公共子序列
最长公共子串和最长公共子序列的区别: 最长公共子串和最长公共子序列的区别为:子串是串的一个连续的部分,子序列则是从不改变序列的顺序,而从序列中去掉任意的元素而获得新的序列;也就是说,子串中字符的位置必须是连续的,子序列则可以不必连续。题目:求两个字符串中的最长公共子序列。 比如: string s1 = “ABCBDAB”; string s2 = “BDCABA”;它们的lcs是:BCB
2015-09-30 20:45:43
817

原创 【动态规划】求一维子数组的最大和
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如,输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。 思路:设sum[i]为以第i个元素结尾且和最大的连续子数组。假设对于元素i,所有以...
2015-09-30 20:43:39
1523

原创 【动态规划】求二维数组从左下到右上的最优路径
1.求二维数组从左下到右上的最优路径,使得路径和最大,并且只能向上或向下走。 解析:求最短路径,路径和最优等都可以用动态规划做。 dp[i][j]表示到i,j坐标的最优路径。 第一,确定初始条件。即向上向左的最优路径确定 dp[i,0] = dp[i-1,0] + arr[i][0] where j =0 dp[0,j] = dp[0,j-1] + arr[0][j] where i =
2015-09-30 20:41:58
5065

原创 说说我对写技术博客的感受
前言其实在读大学时就开始想写技术博客,可是一直都没有开始,就在今年的一个偶然的想法,就陆陆续续开始写自己的博客,后来基本就成为一种习惯,当每遇到或学习了一种 新的技术或知识,第一想法就是整理到自己的博客里去,而以前总是喜欢拿个txt或者word总结整理出来。写到txt或word中一个非常不好的就是每次要重新复习一下以前的知识的时候总是要花费很多时间去找在哪里哪里。后来又想把所有的知识都放到chm中这
2015-07-20 18:12:51
892
原创 记一次22亿大数据分析处理踩坑实践
1. hive脚本相关操作2. mysql数据插入,批量插入脚本的使用,及其中我遇到的一些坑.3. 脚本处理数据的一些操作(遍历目录下的每一个文件, 遍历文件的每一行,获取每一行中的每一列,记录shell线程,执行时间,函数传参和返回值)4. 理解做事情的思路是多么的重要.5. 这是一次xxx的经历.
2017-04-17 17:34:17
869
原创 Java Object你真的了解了吗
在平时的coding中hashCode()和equals()的使用的场景有哪些?clone深复制怎么实现?wait()和notify()有什么作用?finalize()方法干嘛的?看似coding中使用的不多,不重要,但是有没有跟我一样,想好好的了解一下的。毕竟是基础中的基础。
2017-03-06 15:37:09
448
原创 cheat安装使用
## 安装1.sudo apt-get install python 如果已经安装了python则不用安装.2.sudo apt-get install python-pip3. sudo pip install docopt pygments4. sudo pip install cheatOK, 安装完毕.cheat -v查看版本吧另外也可以在github上clone下来, 用python s
2016-12-23 15:35:42
2234
原创 删除Ubuntu分区后恢复
由于一次手误,在Windows中把Ubuntu的系统分区和swap分区删除了,导致不能进系统。开机直接error no such partition和grub rescue mode。下面讲述一下系统恢复过程!
2016-12-23 15:22:57
5622
原创 web.xml入门讲解
要点元素都放在<web-app></web-app>之中大小写敏感、元素顺序敏感web.xml中不仅对大小写敏感,而且对元素出现的顺序也敏感,顺序如图:Servlet的访问路径名称和<servlet>标签和<servlet-mapping>的名称必须是相同原理1、启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点。
2016-04-11 21:36:29
582
原创 比比Java和C#语言运行的快慢
前言:闲来无事,在图书馆随便看看书,发现不论是在论坛还是写书的作者都喜欢将Java和C#拿来比较一番。谈论语言的是非。所以我决定,从语言的运行快慢来比较一下究竟哪种语言快些。
2016-01-03 00:17:56
10027
原创 基于auto_ptr源码的智能指针实现
智能指针某些情况下能够避免内存泄露,这里我做了一次重复制造轮子,目的是为了深入理解智能指针的实现原理。这里只实现了auto_point,根据原理我们不难推出其他智能指针的实现方式。
2015-12-29 16:19:57
568
原创 二叉查找树、平衡二叉树、红黑树、B-/B+树性能对比
前言:BST、AVL、RBT、B-tree都是动态结构,查找时间基本都在O(longN)数量级上。下面做出详细对比。1. 二叉查找树 (Binary Search Tree)概念二叉查找树又称二叉搜索树,二叉排序树,特点如下: 1. 左子树上所有结点值均小于根结点 2. 右子树上所有结点值均大于根结点 3. 结点的左右子树本身又是一颗二叉查找树 4. 二叉查找树中序遍...
2015-10-12 20:43:16
26000
2
原创 【STL源码剖析】Sort算法
前言:sort算法必须拿出来单独将,因为它是STL所有算法中最复杂最庞大的一个,就像我肯定会把copy算法单独列出来一样,这两个算法太重要了。提示:STL算法特点是,前两个形参变量都是迭代器指针。并且每个算法都有两个版本,一个是默认版本,另外一个是提供仿函数的版本。介绍:sort算法接收两个随机存取迭代器(RandomAccessIterators),所以像list这种BidirectionaIt
2015-10-09 16:16:24
733
原创 动态规划概念
一、基本概念动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那
2015-09-30 20:29:23
564
原创 C++实现LRU(最久未使用)缓存算法
LRU缓存算法也叫LRU页面置换算法,是一种经典常用的页面置换算法,本文将用C++实现一个LRU算法。LRU算法实现并不难,但是要高效地实现却是有难度的,要想高效实现其中的插入、删除、查找,第一想法就是红黑树,但是红黑树也是一种折中的办法。插入、删除效率最高当属链表,查找效率当属hash。所以,这里我们就将链表和hash结合起来,利用空间换时间的思想,实现LRU算法。LRU具体概念就不列出了,本文的目的是进一步了解LRU算法和学习高效的编程方法。
2015-09-11 16:21:26
11965
5
原创 学习STL,实现一个单链表的迭代器
STL源码剖析中,空间配置器和迭代器属于比较晦涩难懂的两章,这里学习了STL迭代器后也尝试自己写一个迭代器,实现单链表的迭代器,实现不难,可以说是一个玩具而已,但是能够帮助我们理解STL迭代器的基本原理。1.节点Node和单链表的定义LinkList//声明templateclass ListIterator;templateclass LinkList;//链表节点temp
2015-09-10 10:38:00
2060
原创 数据结构——二叉树的层次遍历
二叉树的层次遍历说简单也简单,说难也难。下面是我读编程之美和研究数据结构结合大神的博客来实现的二叉树的层次遍历,这里只给出三种简单高效的解法。
2015-09-08 20:22:29
1764
原创 C/C++易错难点笔记01
C++是一门神奇的语言,很多时候你对底层不熟悉,很难知道某些情况下的结果,下面是我不断积累的疑惑点,这里将其记录下来。
2015-08-21 20:20:17
849
原创 【STL源码剖析】令人困惑的语法
困惑的语法obj * volatile * my_free_list的含义这个声明原来的形式是:obj** my_free_list,这样的话*my_free_list(空闲的内存块指针数组中的一个元素)可能被优化到寄存器中,从而使库代码无法lock住对它的读调用(如果在寄存器中则另一个线程可能会无意中修改该寄存器的值,而在内存中由于另一个线程没有访问权力所以不能修改)。 要声明变量必须在
2015-08-02 20:03:32
1228
com.zend.verifier_11.0.2.v20140926-0202.jar
2014-11-12
俄罗斯方块
2014-07-26
C++编写的动态库,可不可以只有一个dll文件。
2015-05-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人