木水川的博客


  • 首页

  • 分类

  • 归档

  • 标签

Rxjava中封装回调需要注意的线程问题

发表于 2023-05-03   |   分类于 Rxjava   |     |   阅读次数
Rxjava 很大的一个特点就是可以通过 observeOn 和 subscribeOn 操作符结合Scheduler来方便地切换线程,这也是很多人选择使用Rxjava的主要原因之一。但是如果Observable中封装了回调方法,那我们就需要注意了,操作符可能并不会如我们预期的那样运行在对应的线程上。 简单的Scheduler切换线程让我们首先来看看下面的代码:创建了一个自定义的Observable发送出一个数字1然后通过map操作符转化成一个字符串,之后将其订阅在Computation线程上并在IO线程上接收最终结果。 123456789101112131415Observable.crea ...
阅读全文 »

算法总结-使用 TreeMap 解决 My Calendar 问题

发表于 2022-12-07   |   分类于 算法   |     |   阅读次数
TreeMap 继承了 AbstractMap 类,同时实现了 NavigableMap 接口,其内部的实现是基于红黑树,存储的元素会按照 key 进行增序排序, 也可以在创建 TreeMap 的时候传入一个 Comparator 参数来定义如何排序。所以对于那些有排序需求的 key-value 数据就可以使用 TreeMap 来存储。 TreeMap的java api可以参考官方文档, 其中几个比较特殊的api有: ceilingEntry(K key):返回一个 key-value 的 Entry, 其 key 值大于等于传入的参数 key, 如果没有则返回 null。 floorEnt ...
阅读全文 »

两道算法题

发表于 2022-11-12   |   分类于 算法   |     |   阅读次数
题目一 聚会分组题目描述: n个人要一起参加聚会,其中有些人是互相认识的,问能否将参会的人分成两组并且每组的人互相都不认识。 如4个人, 1认识2, 2认识3, 3认识4 就可以1和3 分一组,2和4分一组,如果2同时认识3和4,那么就无法进行分组。 题目分析: 将每个人看做一个节点,互相认识的节点用线给连接去起来,这样所有有直接或者间接关系的节点就会组成一个图。 然后使用BFS的方式来便利这个图中的每一个节点,并且在遍历的过程中进行分组,分组的信息可以存储在两个HashSet中。 如果当前节点是组A,那么它所有的连接节点都应该分到组B。如果发现当前节点的一个连接节点已经分到了和当前节点在同一 ...
阅读全文 »

使用EJS模板自动生成代码

发表于 2021-05-22   |   分类于 Node   |     |   阅读次数
想象一下有这样的一种场景:你的工程中会用到各种动物类来代表每一种动物,所以每次添加新的动物种类的时候你就需要手动写一个动物类。如果只有几个动物还好说,但是如果动物不断增加到几十个甚至是上百个呢?难道你就要重复上百遍地写这种无聊的代码吗?不会偷懒的程序员不是好的程序员,在本文中我们就来研究一下如何使用EJS模板结合NodeJS来批量地自动生成代码,从而解放我们的双手来偷懒。 EJS 是什么EJS是一套简单的模板语言,可以让开发者使用JavaScript 代码生成 HTML 页面,具有快速开发、语法简单、执行迅速等特点。EJS支持多种标签,在我们的模板中将会主要应用这样的标签<%= EJS ...
阅读全文 »

BFS计算出面积最大的矩形

发表于 2020-11-28   |   分类于 算法   |     |   阅读次数
很多大厂面试时都会考算法,然后招人进去了可能就干一些 ctrl+c/ctrl+v 的简单工作,所以就有了面试造飞机,实际工作拧螺丝钉的调侃说法。其实不然,虽然程序员大部分的工作可能不会涉及到算法,但是一旦遇到那些需要算法的复杂情况,如果对这个算法不熟的话可能会卡住你好几天的时间;但是如果你会这个算法的话那可能仅仅需要几个小时。前一段时间工作中就遇到了这样的一个问题最后使用了BFS算法才完美地解决了这个问题。 问题描述当开发导航SDK的时候,需要在展示地图的同时在地图上覆盖一些View来展示一些重要的信息,如往左转,前方有收费站、服务区等。但是我们不希望这些View将地图上正在展示的一些重要的P ...
阅读全文 »

算法总结-滑动窗口

发表于 2020-02-17   |   分类于 算法   |     |   阅读次数
滑动窗口通常应用在从字符串中寻找满足条件的子串一类的题目中,是上文中双指针算法的一种特殊形式。滑动窗口算法的关键是需要一个数组来记录下当前窗口中每个字符的数目,然后再根据具体的条件来移动窗口前后的指针。 LeetCode3题目链接: https://leetcode.com/problems/longest-substring-without-repeating-characters/ 题目描述: 从一个字符串中找到一个最长的不包含重复字符串的子串,然后返回其长度。 例子 123Input: "pwwkew"Output: 3 Explanation: 最长子串为 "wke", 其长度为 3. ...
阅读全文 »

算法总结-双指针

发表于 2020-02-13   |   分类于 算法   |     |   阅读次数
当需要遍历数组或者字符串并从中找出满足条件的子集或者子串的时候,简单的方法就是使用嵌套的循环来实现,但是这样的实现通常时间复杂度会太高,此时就可也考虑使用双指针来对算法进行优化。双指针顾名思义,就是需要应用到、两个指针,一个指针在前一个指针在后,通过移动这两个指针来找到满足条件的解。 LeetCode15题目链接:https://leetcode.com/problems/3sum/ 题目描述:从一个数组中找出所有不重复的三元组,每个三元组中的数字之和为0。 例子 1234567数组 nums = [-1, 0, 1, 2, -1, -4],满足条件的解:[ [-1, 0, 1], [-1 ...
阅读全文 »

潜艇大冒险

发表于 2020-02-07   |   分类于 算法   |     |   阅读次数
家里的娃报名火花思维有一天收到了火花思维给寄来的一套很有趣的教具:潜艇大冒险。这套玩具看上去很像小时候玩过的华容道。华容道是通过移动各种不同的棋子最终将曹操移动到下面中间处的出口,潜艇大冒险同样是移动各种棋子将潜水艇移动到下面中间处的出口。不同之处就在于潜艇大冒险的棋子更丰富一些,不但有些棋子有伸到外面的“耳朵”附件,而且通过旋转、排列不同的棋子可以摆出各种不同难度的棋局。教具中附带的文档给出了60个难度逐渐升高的棋局和对应答案,十分具有可玩性,孩子也十分喜欢。在陪孩子玩的过程中,啊哈,灵机一动:这不就是一个很标准的DFS(深度优先搜索)问题吗?在每一步都会有2~3种走法,使用DFS进行暴力穷 ...
阅读全文 »

算法总结-股票买卖

发表于 2019-12-25   |   分类于 算法   |     |   阅读次数
股票的买卖问题就是在已知股价波动情况和其它一些限制条件的前提下,合理地安排买卖的时间点来获取最高的利润,基本上都是通过贪心算法和动态规划来解决。下面结合具体的题目进行分析。 LeetCode121 股票买卖时机问题1题目链接:https://leetcode.com/problems/best-time-to-buy-and-sell-stock/ 题目描述: 给定一个数组代表每天的股价,在只允许买卖一次的情况下找出可以得到的最高利润。 例子123Input: [7,1,5,3,6,4]Output: 5Explanation: 在第二天以价格1买得股票,然后再第5天以价格6卖出股票就可以得到 ...
阅读全文 »

算法总结-广度优先算法

发表于 2019-10-22   |   分类于 算法   |     |   阅读次数
前面我们了解了深度优先算法,在遍历一棵树的时候会深入地遍历完树的一个分支后才会去遍历其它的分支。而广度优先算法则是从根节点开始一层一层的进行遍历,只有完全遍历完一层所有的节点后才会进入下一层的遍历。广度优先算法的一般套路如下: 创建一个队列并将根将节点插入到个队列中,此时根节点作为第一层,总共有一个节点。 在每层遍历开始前,队列的长度就是这一层的节点总数,我们记录下这个数目然后不断地将节点出队进行遍历并将其子节点插入到队列中,同时每遍历一个节点就将前面记录的数字减一。 当数字为零时,表明这一层的所有节点已经遍历完了,返回第二步进行迭代遍历直到队列为空为止。 我们可以结合LeetCode的题 ...
阅读全文 »
12…6
木水川

木水川

人生如梦

58 日志
15 分类
27 标签
github 知乎

我的ChinaUnix博客

木水川
© 2023 木水川
由 Hexo 强力驱动
主题 - NexT.Pisces