一道算法和一些(我认为有趣的)开源项目
这周的内容有点水,简单分享下这周学到的东西。
算法
LC 342 - Power of 4 without loop/recursion
这个题目有点意思。抛开 1(0x0000 0001)
这个例外,像 4(0x0000 0100)
、16(0x0001 0000)
、64(0x0100 0000)
可以观察到二进制形式下很有规律,只有一位是 1
,接下来跟着偶数个 0
(否则就是 2 的幂)。代码参考自 https://www.geeksforgeeks.org/find-whether-a-given-number-is-a-power-of-4-or-not/
a) There is only one bit set in the binary representation of n (or n is a power of 2)
b) The bits don’t AND(&) any part of the pattern 0xAAAAAAAA
/**
* @param {number} num
* @return {boolean}
*/
var isPowerOfFour = function(num) {
return (num != 0) && ((num&(num-1)) == 0) && !(num & 0xAAAAAAAA);
};
解释:
(num&(num-1)) == 0
先过滤出来 2 的幂,例如2&1
(0x10 & 0x01
),以及4&3
(0x0100 & 0x0111
)- 对于 4 的幂,
1
必须出现在奇数位上,而A
(0x1010
) 的 1 均出现在偶数位上
开源项目
- github/hub - 使用类似
hub clone foo/bar
的命令取代git clone git@github.com:foo/bar.git
。 - lodash - 一套 JavaScript 实现的工具类函数集,正在随机参考中。
- jakubroztocil/httpie - 一个更为友好的命令行 http debug 工具,图形化界面我习惯使用 fiddler。
- LeetCodeAnimation - 使用动画演示 LeetCode 解题算法。
- doocs/advanced-java - 互联网 Java 工程师进阶知识完全扫盲。
- awesome - Awesome lists about all kinds of interesting topics.
博客首页摘要的算法
虽然 Liquid 提供了 truncate 以及 truncatewords API,但是对于中文效果不理想,另一方面如果截断的地方有特别的 css 样式,那么对于何时关闭的处理简直是。。。
参考了 http://kingauthur.info/2013/01/20/the-paginator-and-excerpt-in-jekyll/ 的实现,摘录如下:
{{ post.content | split:'<!--break-->' | first}}
借助了 split API,在正文手动插入 <!--break-->
来控制,更为自由、安全。
另外,为了防止 {{foo | bar}}
渲染的时候被误认为是 Liquid 指令,可以使用 raw 标签。
其他
Dota 2 TI9 抢票开始了,结果… 自然是没抢到啦。意外了解到大麦网的 bug,只要知道活动的 id 就能直接进入支付页面,sad…