木水川的博客


  • 首页

  • 分类

  • 归档

  • 标签

算法总结-归并排序

发表于 2019-09-20   |   分类于 算法   |     |   阅读次数
归并排序是分治法的一种应用,其思路是将数组分为左右两部分,分别递归地进行归并排序,然后将这两部分给合并起来。归并排序的c++递归实现可以参考下面的模板: 1234567 int mergeSort(iterator l, iterator r) { if (r - l <= 1) return; iterator m = l + (r - l) / 2; int count = mergeSort(l, m) + mergeSort(m, r); inplace_merge(l, m, r); return count;} 在上述代码中 ...
阅读全文 »

算法总结-回溯法

发表于 2019-09-10   |   分类于 算法   |     |   阅读次数
回溯法是一种通过暴力穷举的方式解决问题的方式,是深度优先搜索的一种具体应用。其思路不难理解,想象一下你在走一个迷宫,当在一个路口有A, B, C 三条岔路的时候你要怎么办呢? 大家可以很容易地想到先尝试道路A, 如果走不通就回到这个路口尝试道路B,如果还走不通就尝试道路C,这就是一个典型地应用回溯法的例子。如果将目光着眼于整个迷宫,就可以发现这个迷宫其实就是一颗多叉树,每个路口就是一个节点,每个路口的岔路就是这个节点的子树,在这颗多叉树上应用深度优先搜索就是回溯法。LeetCode上关于回溯法的题目一般比较偏难,但是不管是如何变化,其解决的思路都是不变的,甚至有一定的“套路”可以解决大部分的问 ...
阅读全文 »

算法总结-深度优先算法

发表于 2019-09-03   |   分类于 算法   |     |   阅读次数
深度优先算法多数是应用在树上,一个比较典型的应用就是二叉树的中序遍历。所谓树的前、中、后序遍历都是以树的根节点为准的,如下图所示的二叉树中序遍历的结果就是 4,2,5,1,6,3,7。下面我们来看一下 LeetCode 中的二叉树中序遍历的题目。 LeetCode94题目链接: https://leetcode.com/problems/binary-tree-inorder-traversal/ 题目分析: 树的遍历都有递归和非递归两种方式,对中序非递归来说需要使用栈的帮助来实现,我们需要从根节点出发寻找当前树的最左下角的叶子节点,并将路径上的节点都进栈。当找到后,再根据栈中存储的节点来依次 ...
阅读全文 »

算法总结-二分查找法

发表于 2019-09-01   |   分类于 算法   |     |   阅读次数
在LeetCode的题目讨论中,经常会有些大神将某一类的题目结题思路给整理了出来,感觉受益匪浅。受之启发,萌生了自己也总结一下常见算法的解题思路的想法,希望可以让自己在这个总结的过程中可也融汇贯通这些思路,同时可以给后来者以启发。 从哪里开始好呢?就从经典的二分查找法开始吧,这个算法几乎所有学过计算机的人都知道,而且我在之前的面试中不止一次碰到过这个算法以及这个算法的变种。二分查找法的思路就是通过条件判断每次淘汰掉一半的数据,从而可以达到一个非常快的查找速度。下面我们结合具体的题目来看一下。 LeetCode35题目链接: https://leetcode.com/problems/searc ...
阅读全文 »

2019全球移动开发者技术峰会

发表于 2019-09-01   |   分类于 Android   |     |   阅读次数
2019年8月24号我受邀和同事Dima一起参加了2019全球移动开发者技术峰会并在大会上做了演讲参加了圆桌讨论。从得到通知确认到大会召开有一个多月的时间,说实话刚开始的时候我心中多少有点抗拒,主要有以下几个原因: 之前从来没参加过,内心多少有点恐惧感,不知自己是否真的能胜任。我想这是人对未知的普遍感受吧,但勇敢的人总会努力去战胜心中的恐惧,从而无所畏惧。 懒,对就是懒,去参加的话就意味着要准备材料,要多次练习,额外给自己加了些工作。 最近AI和AR比较火,为了显得更有料我的选题决定介绍mapbox 的 vision sdk,因为这个 sdk 里面用到了 AI 和 AR,但是我其实对 v ...
阅读全文 »

我的第一本书《RxJava响应式编程》

发表于 2018-05-12   |   分类于 RxJava   |     |   阅读次数
从编辑找到我问我是否有兴趣写一本关于RxJava的书,到实体书地正式出版差不多是11个月。在这11月中间,我经历了工作以来最忙的一段时间,长时间的加班到半夜以及频繁的出差不禁让人从身心上都忍受着煎熬。在这样的背景下还要抽空来写书无疑更是雪上加霜,所以我不止一次地想要放弃。伴随着跟自己不断地做着斗争以及工作上的巨大压力,最终我还是成功地将这本书完成了,至今想起来还是感觉有些不可思议,这或许就是有志者事竟成吧。在我发了一条朋友圈打了个卖书的广告后,这条朋友圈成了我至今为止点赞和评论最多的一条,还有很多热心的朋友帮我做了转发,这让我的内心充满了感激和喜悦。十分感谢这些支持我的朋友们。 啰嗦了这么多下 ...
阅读全文 »

在Android中使用dlopen加载so

发表于 2017-12-10   |   分类于 Android   |     |   阅读次数
在使用cmake解决Android中对第三方库的依赖一文中,我们通过cmake的配置来将依赖的so给链接了起来。但是有时我们可能需要在程序运行地时候来动态地加载依赖库。linux 提供了动态加载依赖库的系统调用,我们在 Android 中也可以使用。 将我们要依赖的 so 和工程中其他的 so 都放入到 jniLibs 目录下,这样所有的 so 文件都会打包到 App 中。当然被依赖的 so 也可以放入其他指定的目录。 获取到被依赖 so 的路径,如果被依赖 so 放在自定义的路径里,那这一步可以忽略。我们可以根据 App 里其他 so 的路径来得到被依赖 so 的路径。如被依赖的 so 为 ...
阅读全文 »

Termux在Android native开发中的使用

发表于 2017-12-10   |   分类于 Android   |     |   阅读次数
在 Android 手机上安装 termux 可以在不用 root 的情况下把手机打造成一台小的 linux 服务器,基本上可以做任何我们能在 linux 上做的事情。现在我们要在 turmux 上测试一下我们开发的 sdk termux 的快捷键首先了解一下 termux 的一些快捷键,这会方便我们后边的操作。快键键需要音量+-键配合输入法进行操作。 按键 模拟的按键 音量-键(Ctrl)+L 清除屏幕内容 音量-键(Ctrl)+C 终止当前操作 音量-键(Ctrl)D 退出当前会话session 音量+键+D Tab键(可自动补全命令或文件名) 音量+键+W ...
阅读全文 »

C++ SDK 设计经验总结

发表于 2017-11-28   |   分类于 Android   |     |   阅读次数
前一段时间用c/c++开发了一个Android SDK,中间踩过很多坑,最后做了一版重构版,总结了一些经验教训。 接口设计接口设计有以下几点我认为很重要: 1. 保持简洁要把我们的 SDK 用户当做小白,他们基本不会阅读你的文档,也不会看我们的代码注释,只会将 demo 里的代码复制粘贴到他们自己的工程里。所以我们在设计接口的时候一定要多站在小白用户的角度来考虑怎样才能把接口设计得足够简洁,从而减少我们很多的后期支持操作。 2. 保持稳定这一点应该很好理解,如果接口不稳定,每次更改接口必然会导致用户的抱怨,他们也必然会产生各种各样的集成问题,我们就必须做好增加支持工作量的准备,双方都很不hap ...
阅读全文 »

使用cmake解决Android中对第三方库的依赖

发表于 2017-06-11   |   分类于 Android   |     |   阅读次数
现在Android studio已经支持使用cmake来进行native开发了。比起ndk来说,cmake好用多了,比如可以在Android studio里面直接dubug native代码,对native 代码也支持高亮显示、代码提示、快捷跳转和自动格式化等功能。总得来说使用Android studio开发c/c++现在几乎和开发java一样方便了。 现在假设我们有这样一个需求:我们需要依赖一个第三方的so库;我们需要提供给客户我们打好包后的so库;我们还需要创建我们自己的jni库来进行测试,要怎么进行配置呢? 首先我们创建一个工程,记得选中”include c++ support”,这样A ...
阅读全文 »
123…6
木水川

木水川

人生如梦

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

我的ChinaUnix博客

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