来自LeetCode的第172道算法题Factorial Trailing Zeroes

Given an integer n, return the number of trailing zeroes in n!.

Note: Your solution should be in logarithmic time complexity.

即给一个整数 n, 给出 n 的阶乘 n! 中有多少个 0,要求算法时间复杂度是 O(log(n))

思路

看到题目后,有人直接拔“刀”切“菜”,先 ‘%’ 再 ‘/‘ ,各种挥舞之后,发现提示 “Out of Range” 的错误,然后绞尽脑汁,回忆各种数据结构与算法,尝试是否能够尽快“吞”下,最后发现还是被“噎”住了:(

阅读更多

伯乐在线上看到这篇Google工程师教你编写你的第一个垃圾回收器文章,着实被作者Bob Nystrom深入浅出、娓娓道来讲述垃圾回收机制的思路所吸引,必须收藏与分享;)

Bob Nystrom的话

每当我倍感压力以及有很多事情要做的时候,我总是有这样一种反常的反应,那就是希望做一些其他的事情来摆脱这种状况。通常情况下,这些事情都是些我能够编写并实现的独立的小程序。

一天早上,我几乎要被一堆事情给整疯了——我得写我那本《游戏编程模式》、处理一些工作上的事情、还要准备一场Strange Loop的演讲,然后这时我突然想到:“我该写一个垃圾回收器了”。

是的,我知道那一刻让我看上去有多疯狂。不过我的神经故障却是你实现一段基础的程序语言设计的免费教程!在100行左右毫无新意的c代码中,我设法实现一个基本的标记和扫描模块。

有人认为,垃圾回收好比是有更多鲨鱼出没的危险水域,但在这篇文章中,我会给你一个漂亮的儿童游泳池去玩耍。可能这里面仍然会有一些坑,但至少这是一个浅水区。

精简、复用、再复用

垃圾回收背后有这样一个基本的观念:编程语言(大多数的)似乎总能访问无限的内存。而开发者可以一直分配、分配再分配——像魔法一样,取之不尽用之不竭。

当然,我们从来都没有无限的内存。所以计算机实现回收的方式就是当机器需要分配一些内存,而内存又不足时,让它回收垃圾。

“垃圾(Garbage)”在这里表示那些事先分配过但后来不再被使用的内存。而基于对无限内存的幻想,我们需要确保“不再被使用”对于编程语言来说是非常安全的。要知道在你的程序试图访问一些随机的对象时它们却刚好正在得到回收,这可不是一件好玩的事情。

阅读更多