摘要:
题目描述: 最长不重复子串(Longest No Repeat String,LNRS)就是从一个字符串中找到一个连续子串,该子串中任何两个字符都不能相同,且该子串的长度是最大的。分析:解法一:动态规划 动态规划就是用来解决这种最优化问题,关于字符串的很多有趣的问题如最长公共自序列,最长上升子序列等都可以用动态规划来解,这道题我的第一想法也是动态规划。 动态规划的核心在于寻找最优子结构,对于一个字符,如果他与他前面的最长不重复子串都没有相同的字符,那么他也可以加入这个子串中,构成一个新的子串。即对于字符数组a[],dp[i]表示以a[i]为结尾的最长不重复子串长度,dp[0] = 1,... 阅读全文
阅读排行榜
[综述]领域特定语言(Domain-Specific Language)的概念和意义
2013-07-18 19:57 by 庸男勿扰, 3558 阅读, 收藏,
摘要:
领域特定语言(Domain Specific Language, DSL)是一种为解决特定领域问题而对某个特定领域操作和概念进行抽象的语言。领域特定语言只是针对某个特定的领域,这点与通用编程语言(General purpose Language)不同,如Java既可以适用于网站开发,也可以适用于手机开发。一旦领域特定语言离开了相关领域,它就会变得不适用。但针对某个特定的领域,领域特定语言能很自然地方便地表述问题,也常常比通用编程语言更快地解决问题。 Martin Fowler 在《领域特定语言》一书中认为: “Domain-Specific Language: a computer p... 阅读全文
[数字技巧]子集问题(寻找给定集合的所有子集)
2014-03-24 19:50 by 庸男勿扰, 2865 阅读, 收藏,
摘要:
我们定义该问题如下: 给定一个集合C,找出所有的集合C',使得C'包含于C。一、无重复元素的集合 我们首先来考虑一种简单的情形,C中的数都是各不相同的,这就意味着所产生的子集不会有重复的。 直观来说,求一个集合的子集,无非就是对每个元素进行枚举,枚举两种状态”选“还是”不选“。例如,对一个集合C,当对cur这个位置的元素进行枚举时,对剩余的元素可以递归调用这个枚举的过程,当cur为数组长度n时,代表枚举结束。 子集的解空间又叫子集树,其叶子节点所代表的状态即为所有的子集。例如,集合{1,3,5},其子集树如下所示: 如上图所示,共有8个叶子节点,代表8个子集,有了子集树,要求出 阅读全文
[GC]一个简单的Garbage Collector的实现
2013-12-23 00:52 by 庸男勿扰, 2246 阅读, 收藏,
摘要:
前言: 最近看了google的工程师写的一个非常简单的垃圾收集器,大概200多行C代码,感叹大牛总能够把复杂的东西通过很简单的语言和代码表达出来。为了增加自己的理解,决定把大牛的想法和代码分析一遍,与大家分享,顺便结合wikipedia,复习下GC的基本概念。 相信大家在写程序的过程中都遇到内存管理的问题,诸如malloc/delete、new/free等,C/C++需要程序员主动进行内存的释放,即垃圾内存的回收,而像Java就提供了GC机制来自动进行垃圾回收。一、垃圾与垃圾回收 为什么需要进行垃圾回收呢? 垃圾回收就是要让程序员感觉有“无限”的内存供他一直allocate,事实上... 阅读全文
[创新工场2014] 2014创新工场校园招聘笔试题
2013-09-26 16:42 by 庸男勿扰, 1874 阅读, 收藏,
摘要:
继上一篇博文《[创新工厂2014]回文修复》后,继续推出第二道创新工厂的笔试算法题~ 对于非负数列a1、a2、......、an,在数轴上做垂线连接点(i,0)和(i,ai)。选择这样的两条线和x轴可以形成一个容器,我们以面积代表所装的水,求以这种方式构成的容器能装的最大面积。比如选择a2=3、a5=6,则所装的面积为9。分析: 这道题实际上的意思是:对于一个给定的序列,求abs(i-j)*min(a[i],a[j])的最大值! 先对序列按照高度排序,然后按照排序后的顺序进行枚举,枚举过的就做标记,表示已经访问过了,保证了当前的节点,是序列里的最小高度的板,那么以这个板为边界能装的最... 阅读全文
浙公网安备 33010602011771号