跳到主要内容

简单又不简单的二分法

· 阅读需 5 分钟

二分法的思路比较简单,但往往不容易写对,比如要不要加等号、死循环等问题。实际上,二分法就是一个逐步缩小范围的过程,每次缩小一半。

经典应用

最经典的二分法的应用是:一个有序数组arr(例如升序),数组元素不同,从数组中找数target的索引,如果不存在返回-1。代码比较简单:

int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + right >> 1;
if (arr[mid] == target) return mid;
if (arr[mid] > target) right = mid - 1;
else left = mid + 1;
}
return -1;
}

快速幂取余算法

· 阅读需 2 分钟

计算a的b次方模m:

ab%ma^b \% m

暴力的做法是将a乘b次,最后对m取模。不过,这样可能导致溢出,时间复杂度也很高。

现在考虑,求3的10次方,最少需要做几次乘法运算。

并查集初步

· 阅读需 5 分钟

引言

有若干节点,并将其中一些节点对进行连接,要判断任意两个节点是否连通(有路径到达,而不要求直接连接),连通后就不会断开连通关系,此时就可以使用并查集。并查集擅长动态维护许多具有传递性的关系,能在无向图中维护节点之间的连通性。

要判断两个节点是否连通,可以把连通的节点加入到各自的集合里,也就是,同一个集合里的节点都是连通的,不同集合里的节点是不连通的。

解决Deepin桌面下Office图标问题

· 阅读需 2 分钟

在使用ArchLinux系的系统(比如我用的Manjaro),使用Deepin桌面时,Office图标会显示为压缩包:

虽然说,docx、xlsx、pptx格式其实也就是zip包,但图标错乱还是会让强迫症的我感觉很难受。不过,在Xfce4桌面环境下是没有这个问题的,Office图标正确显示为Office图标,但Deepin下就有这种问题,有点奇怪。

《实战Java高并发程序设计》读书笔记

· 阅读需 10 分钟

这两天快速看了下《实战Java高并发程序设计》这本书,对Java高并发程序有一个初步的认识。

这本书是在iPad上用MarginNotes 3看的,只是做了些笔记,还没进行代码实践,后续还需要细化。