稀有猿诉

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

Upgrade to RxJava 3

RxJava从2015年问世,2016到2017开始流行,在2018到2019左右达到顶峰,几乎无人不会RxJava,无项目不用RxJava。这期间项目本身也在迭代,从1.0版本,到2.0版本,行业内流行最广的,用的人最多的,项目使用也最多的仍是2.0版本。时过境迁,现在虽然RxJava是一个项目的标配,但是现在它的受关注度,没有前几年高了,但仍有必要研究一下它的最新版本RxJava 3。

数学相关题目

数学是自然科学之母,数学也是算法之母,有一些数学相关的题目需要总结一下。当然暴力法也都是可以解决的,但是通过数学一些公式的引入会提升时间效率。

Beyond RxJava

RxJava是一种编程范式,它并不是一个库,而是一种编程思想,一种解决问题的新思路,一种架构思想。因此,基于RxJava还有大量的其他的库,可以一起更容易让用RxJava构建应用程序。

其他书籍和文档也有提及,这些东西称为RxJava Extras

Introduction to RxJava

RxJava是一个异步数据流式的开源库,已流行于Android开发行业中多年,现在已经变成了Android开发的一个标配,几乎所有,是的几乎所有的项目都会使用它(即使大部分人并没有真的在用它)。也几乎每个开发人员的简历中都会写着熟悉RxJava,甚至是精通RxJava,可见它的流行程度,今天就来学习一下RxJava的基本使用。

搞懂动态规划之状态压缩

动态规划算法博大精深,非常的广泛而复杂。但动态规划离不开状态的存储和转移,要想用动态规划来求解一个问题,必须把问题分解为多个子问题,然后再用状态来记录以解决子问题,最终通过状态转移以得到整个问题的解。根据问题的不同,状态也会有不同的定义,比如有些是用整数来代表计数,有些是用布尔来代表True/False(或者0/1)的状态。

前缀和与差分数组简介

在数组相关的问题中前缀和与差分数组是使用使用比较多的辅助数组,能有效的提升效率。前缀和就是数组中到当前元素的和;差分数组是一个辅助数组,每个元素是原数组相邻元素之差,故命名为差分数组,它在原数组区间修改等操作上能辅助提升效率。

Understanding Dijkstra Algorithm

最短路径问题,是图论中经常遇到的问题,对于非加权图,用广度优先搜索(BFS)就可以找到两个顶点之间的最短路径(最少边数),但对于加权图,就需要用到著名的犾克斯特拉算法(Dijkstra Algorithm)。

图论基础知识

图(Graph))是一个由节点和边组成的略复杂的二维数据结构,通常用于表示物体之间的关系。

理解并运用并查集

并查集Disjoint-set Data Structure)是一种树形的结构,用于处理不相交的集合的高效的查询(find)和合并(union)问题。主要有两种操作一是查询(find),也就是查询某个元素是否属于某个集合;二是合并(union),也即把某个加入到某个集合中,这里的集合都是无交集的。通过路径压缩,并查集的查询和合并都可以达到常数级别O(1)。

理解拓扑排序

拓扑排序Topological Sorting)是指将一个有向无环图(Directed Acyclic Graph)的所有顶点排成一个线性序列,使得图中的起始节点总是排在终止节点的前面,这是有向图每一个边都有起始节点和终止节点。这个名字有点容易混淆,它跟排序算法没有任何关系,拓扑排序仅是针对有向无环图,找到所有节点的一个可达的线性顺序。