稀有猿诉

十年磨一剑,历炼出锋芒,说话千百句,不如码二行。

Binary Search Made Easy

二分查找 Binary Search是效率特别高的一种算法,它能将线性复杂度O(n)降低到对数级别O(logn)。但它对输入数据有要求,比如对于数组来说必须是排序的,否则是不能应用二分的。今天就来理解一下二分查找,然后总结常见的题目和注意事项。

线段树让你不再惧怕区间问题

线段树是用于求解序列区间问题的高效的数组结构,它是以完全二叉树形式来把序列划分为不同的区间,进而把O(n)复杂度提升到O(logn)。

线段树与树状数组有些类似,都可以用于解决区间问题,但线段树更具体普适性,树状数组能解决的问题线段树都可以解决,但反之不然。树状数组的学习可以参考另外一篇文章

编码常见技巧总结

在日常编码中有一些非常常用,但却很细节的小技巧,虽然有朴素的实现的方式,但如果能掌握一些高级技巧不但性能会更好,并且因为技巧比较流行,也不会影响可读性。最简单的例子就是除2和乘2,当然可以直接用乘法和除法,但如果用移位效果更好,也并不影响可读性,因为这是比较流行的做法。

这里就将总结一些常用的小技巧,以供日后查阅。

表达式求值问题总结

在模拟范畴内表达式运算求值是比较典型的一类问题,而且是较难的一类题,细节非常多,数组结构一般只用到栈,需要积累一定的技巧以简化逻辑。

秘密武器之单调栈

除了在树的遍历,DFS等常规场景使用栈(Stack)以外,针对某些特定的问题,还能以栈为主要手段进行非常巧妙的解题,栈中数据(通常是整数)的存储以单调递增或者单调递减的形式,新的元素入栈前通常要把小于它的或者大于它的元素出栈,习惯称之为单调栈

问题的常规解的时间复杂度通常会达到O(n2)或者O(nlogn),但使用单调栈可以达到O(n),思路非常的巧妙。

MarkDown之数学公式

有时候文档里面会涉及一些数学公式,用常规的格式都难以得到满意的效果。

数学公式方面Latex是最为专业的,Markdown也是支持Latex的。

Java集合操作集锦

集合是最为常见的容器,在日常工作之中经常用到,一些集合的常规操作以及不同的集合之间的转换,虽然看似是基础中的基础,但实践中会发现并不是那么显而易见的,特别是涉及boxing的时候,这篇就是想总结 出一些最优的方式来进行集合操作和转换。

注意:这里集合的意思是容器,是一个更为宽泛的概念,包括数组,列表,Map,Set等。

Camera 2 API学习之小结

通过前面的一系列文章,到现在已经算是学完了Camera 2 API的使用了,也做出一个具体基础功能的相机应用,目前可称得上是一个1.0版本了,后续会在此基础上进行迭代。本篇先进行一个小结。

Camera2之录像

前面的文章都是集中在拍照模式,对于相机来说拍照与录像是两个最为基础的功能,这篇文章来看一下使用Camera2如何实现一个简单的录像功能。