leetcode 319. Bulb Switcher

2018-03-13
阅读 2 分钟
1.6k
一共有n个初始状态为关闭的灯泡。第一次打开所有灯泡,第二次每隔一个灯泡关闭一个灯泡,第三次每隔两个灯泡按一下开关。依次类推,问第n次之后开着的灯泡的数量有几个?

leetcode 301. Remove Invalid Parentheses

2018-03-12
阅读 3 分钟
4.2k
现在有一个字符串包含一些左右括号以及字母。一个合法的字符串是指左括号和右括号必定成对出现。要求得出用最少次数的删除可以得到的所有的合法字符串。

leetcode322. Coin Change

2018-03-12
阅读 3 分钟
2.2k
这题本质上考察的是动态规划思想。这里有两种动态规划的方法,分别从递归和非递归的角度解决这个问题。具体的情况还是要看数据的分布情况来确定选择哪种方法。

猫头鹰的深夜翻译:Java Streams

2018-03-11
阅读 14 分钟
2.4k
前言 Stream是Java 8中的一个重大新功能。这个深入的教程是流支持的许多功能的介绍,并着重于简单实用的示例。 了解这个之前,你需要有对Java 8有基础的实践性的知识(lambda表达式,方法引用) 介绍 首先,不应该将Java 8 Streams与Java I/O流混淆(例如:FileInputStream等);它们彼此之间关联不大。 简而言之,流是对数...

猫头鹰的深夜翻译:在JVM上根据合约编程

2018-03-10
阅读 4 分钟
2.4k
按照合约编程,又称为合约编程,是一种软件设计的方法。它规定了软件设计师应该为软件组件定义正式,精确和可验证的接口规范,将常规的抽象数据类型扩展为前置条件,后置条件和不变量。这些规则被称为合约,可以比拟为商业合同中的条件和义务。— Wikipedia[链接]

猫头鹰的深夜翻译:BlockingQueue和持续管理

2018-03-09
阅读 4 分钟
2.1k
在Java中,BlockingQueue接口位于java.util.concurrent包下。阻塞队列主要用来线程安全的实现生产者-消费者模型。他们可以使用于多个生产者和多个消费者的场景中。

猫头鹰的深夜翻译:Java 10的JEP 286-局部变量类型推断

2018-03-08
阅读 4 分钟
3.2k
之前面试的时候问了我是否了解JDK10的变化,一时回答不出来,所以只回答了JDK8中的函数式编程和流编程。今天看到这篇讲JAVA10的文章,顺便了解一下。

leetcode307. Range Sum Query - Mutable

2018-03-08
阅读 5 分钟
2.3k
最开始我们有两种直观的想法,一种是在插入时同时更新后面所有的和,这意味着O(n)的插入复杂度和O(1)的读取复杂度。我决定选择第二种方式,也就是采用类似日志的形式记录下每一次的变更。这样当我们读取的时候,再遍历日志,将相关的变更结果添加到当前的数值上。缺点是,变更很多以及数组很庞大时,效率依然很差。

leetcode303-304 Range Sum Query Immutable

2018-03-07
阅读 3 分钟
2k
这一题思路很简单,因为sum[i-j] = sum[0~j] - sum[0~(i-1)]。我们只需要通过一圈遍历计算出每个下标至0的所有数字的和即可。而利用动态规划则很容易知道sum[0~j] = sum[0~j-1] + num[j]。

猫头鹰的深夜翻译:为何需要缓存以及如何实现缓存

2018-03-05
阅读 5 分钟
2.2k
近十年来,信息技术极高的提升了业务流程,它已经成为了全球企业的战略性方案。它从“可有可无”演变到现在的“不可或缺”。因此,响应时间变得越发的重要。数据获取时间对用户体验影响极大,它在所有的商业应用中几乎都是关键性需求。影响响应时间的因素很多,包括网络管道,协议,硬件,软件以及网速。庞大的IT基础设施和...

leetcode494. Target Sum

2018-03-05
阅读 3 分钟
2.2k
直观的来说,我们可以将所有的情况都尝试一遍并且将可能构成结果的集合统计下来。就以题目中例子来说,原始的输入为[1,1,1,1,1],目标值为3。那么我们假设先给第一个值设置为正数,则只需要知道[1,1,1,1]组合成目标值2的集合个数即可。通过不断的递归调用,当遍历到数组的尽头时,我们只需要知道当前的目标值是否为0,如...

leetcode299. Bulls and Cows

2018-03-05
阅读 2 分钟
2.7k
Bulls and Cows游戏简单来说就是你随手写下一个n位数,并让你同学猜这个数字是什么。假设你的朋友也会猜测一个n位数,他每猜一个数字,你就需要告诉他,猜测的数字中位置正确且值正确的数字(bulls)有几个,位置不正确但是值不正确的数字(cows)有几个。

猫头鹰的深夜翻译:理解CAP定理

2018-03-04
阅读 2 分钟
3.9k
CAP定理是用来提醒设计师在设计联网的共享数据系统时需要作出的权衡。CAP理论影响了很多分布式数据系统的设计。这几年来,CAP一直被广泛的误解为是用于对数据库进行分类的工具。也流传着许多关于CAP的错误的信息。很多关于CAP博客的观点极有可能是错误的。

leetcode297. Serialize and Deserialize Binary Tree

2018-03-04
阅读 3 分钟
2.2k
设计一个方法将一个二叉树序列化并反序列化。序列化是指将对象转化成一个字符串,该字符串可以在网络上传输,并且到达目的地后可以通过反序列化恢复成原来的对象。

leetcode289. Game of Life

2018-03-04
阅读 4 分钟
1.4k
这个内容在维基百科上讲述的非常详细,有图文示例。这个游戏玩家在游戏开始后是不能操作的,完全是由最初的状态来决定最终的结果。板上的每个小格子有两种状态,live或dead。而根据游戏规则,每一次这个板上的内容将会随着前一次板上的内容发生变化。变化的规则如下:

猫头鹰的深夜翻译:你需要了解的数据库名词

2018-03-03
阅读 3 分钟
2.8k
很多人都在讨论数据的指数型增长,以及我们将会有比想象的还要大的数据量。但是,很少有人从数据库的角度谈论这个问题。随着数据量的暴涨,数据库也需要随之升级。这也是为什么既要了解如何分析海量数据,也要了解数据库如何存储这些数据变得越来越重要。

猫头鹰的深夜翻译:请不要把它叫做Restful!

2018-03-02
阅读 3 分钟
1.9k
2000年的时候,Douglas Crockford声明JavaScript是最被误解的编程语言。这种误解来源于不良的命名规范,错误设计,非标准模式等等。因此,误解几乎是与之俱来的。

leetcode140. Word Break II

2018-03-02
阅读 2 分钟
2.3k
现在有一个非空字符串s和一个非空的字典wordDict。现在向s中添加空格从而构成一个句子,其中这个句子的所有单词都存在与wordDic中。字典中不包含重复的单词。

leetcode132. Palindrome Partitioning II

2018-03-01
阅读 3 分钟
1.6k
这道题目的核心思想是动态编程,假设我们已经知道[0,1],[0,2]...[0,i-1]每个子字符串的最少分割数,那么我们可以得出[0,i]子字符串的最小分割数。我们只需要从第i个字符开始往回找所有可以和第i个字符构成回数,假设从第j个字符到第i个字符可以构成回数(0<=j<=i),那么以j作为分割线得到的最少分割数为cut[j-1]+1...

猫头鹰的深夜翻译:使用JAVA CompletableFuture的20例子

2018-03-01
阅读 11 分钟
9.1k
这篇博客回顾JAVA8的CompletionStageAPI以及其在JAVA库中的标准实现CompletableFuture。将会通过几个例子来展示API的各种行为。

leetcode135. Candy

2018-02-28
阅读 2 分钟
2.1k
题目要求 {代码...} 假设有N个孩子站成一排,每个孩子拥有一个评估值。现在要根据以下的需求给孩子们分发糖果: 每个孩子至少有一颗糖 有更高评估值的孩子应当比两侧孩子得到的糖更多 问最少要发出多少颗糖? 思路和代码 这里我们可以举一个例子来先试着分配一下:假设有10个孩子,每个孩子对应的评估分别是[3,4,5,7,2,3...

猫头鹰的深夜翻译:JAVA中异常处理的最佳实践

2018-02-27
阅读 6 分钟
4.1k
作为程序员,我们想要写高质量的能够解决问题的代码。但是,异常经常是伴随着代码产生的副作用。没有人喜欢副作用,因此我们会试图用自己的方式来解决这个问题。我看过不少的程序用下面的方法应对异常:

leetcode241. Different Ways to Add Parentheses

2018-02-25
阅读 4 分钟
2.1k
这是经典的分治法。我们将算式从一个操作符的位置分割开,并分别得出左边和右边算式所有可能的值。再将左右的值分别按照操作符进行计算。这里通过递归实现。

leetcode239. Sliding Window Maximum

2018-02-25
阅读 3 分钟
1.7k
假设有一个数组和一个长度为k的窗口,1 ≤ k ≤ 数组长度。这个窗口每次向右移动一位。现在问该窗口在各个位置上,能够得到的子数组的最大值是多少?

猫头鹰的深夜翻译:在JAVA中记录日志的十个小建议

2018-02-25
阅读 4 分钟
7k
JAVA日志管理既是一门科学,又是一门艺术。科学的部分是指了解写日志的工具以及其API,而选择日志的格式,消息的格式,日志记录的内容,哪种消息对应于哪一种日志级别,则完全是基于经验。从过去的实践证明,JAVA的日志记录会严重的影响性能。我也曾多次亲眼见到在DEBUG模式下运行的在线股票交易程序,比在WARN或是其它...

leetcode279. Perfect Squares

2018-02-24
阅读 3 分钟
2.4k
我们可以用另一种思路来拆解n:比如:numSquares(1) = 1;numSquares(2) = numSquares(1)+1numSquares(3) = numSquares(3-1*1) + 1numSquares(4) = 1numSquares(5) = min(numSquares(5-1*1)+1, numSquares(5-2*2)+1)numSquares(10) = min(numSquares(10-1*1)+1, numSquares(10-2*2)+1, numSquares(10-3*3)+1)

Leetcode188. Best Time to Buy and Sell Stock IV

2018-02-24
阅读 2 分钟
1.9k
这里采用了动态编程的思想。假设我们希望得到第j天最多进行i次交易的最大利润,我们首先想到的是,可以通过比较第j-1天最多进行i次交易的利润,以及第j-1天进行i-1次交易然后最后一次交易为卖出当天的股票所带来的利润。

leetcode164. Maximum Gap

2018-02-23
阅读 2 分钟
1.7k
这里并不需要完全的进行排序。我们只需要找到合适的区间划分,并将各个数字丢到其所属的区间中。之后,我们只需要比较前一个区间的最大值和后一个区间的最小值之间的差距即可以获得该数组最大的间隔。

leetcode260. Single Number III

2018-02-23
阅读 2 分钟
1.5k
题目要求 {代码...} 假设一个整数数组中,除了两个数字以外,所有的数字都出现了两遍。要求我们找到这两个数字。 可以先参考Single Number I 和 Single Number II。 思路与代码 这里需要了解两个位运算的重要知识: a^b^b = a 即b^b=0 a&(-a)能够获得a的二进制形式的最右侧的1的位置。 举例解释一下第二个位运算:一...

猫头鹰的深夜翻译:使用组合模式来开关灯

2018-02-21
阅读 3 分钟
1.8k
设计模式可能是博客圈最热门的话题之一。但是,用来说明每个设计模式的例子通常不是很形象。为了挽救这一点,这篇博客将用一个简单有效的例子来解释组合模式。