快速求出某数的所有约数

故事是这样的,有一场比赛题,本来应该是考察 DP 的,但是算法写出来之后,一值暴 TLE,我一开始以为是 C++ 的 map 是 log(n) 的复杂度,于是改成了 unorder_map 试了下,结果还是 TLE。最后花了很久定位到求约数的算法超时。 按照人惯性的思维,求一个数的约数,直接使用一个 for 就可以了。而且算法的复杂度是 O(n) 具体一点可以说是 O(sqrt(n)) 也是可以接受的。 但是,还是有另一个更加快速的方法。 using namespace std; int prime[100000]; bool isPrime[1000005]; void getPrime(int x){ for (int i = 1; i < x; i += 2) { isPrime[i] = 1; ... [阅读全文]

VIM Quickrun 插件

这同样是一个重复造轮子的项目,主要的原因就是受大家喜欢的 https://github.com/thinca/vim-quickrun 并不能很好的满足我的需求。 他的运行方式是新开一个 buffer 然后将运行的结果放在 buffer 里面。这样有一个问题就是交互不是很方便。同时,我对这个插件的需求主要还是在写 ACM 的代码时,可以快速的运行。同时在写单脚本语言时,可以方便的配置。 所以,基于以上的几个原因,我自己便开始写了这么一个小插件。 原理其实很简单,就是对你当前的文件名进行一个匹配。比如 "main.cpp",我会发现这个文件的后缀名是 "cpp",于是,就会自动查找到配置文件中的 "cpp" 选项。 let g:quickrun_known_file_types = { \"cpp": ["!g++ %", "... [阅读全文]

字符串纠错

故这样的,之前在 Leetcode 遇到一道题:『Edit Distance』, 当时做的时候并没有太多的思考,原因也很简单,不知道这道题的算法什么时候可以用得到。 直到,最近在看搜索引擎部分的算法,在处理用户的拼写异常的时候,比如,当用户搜索 『苏州大雪』的时候,怎么能进行纠错为『苏州大学』。 亦或者,在进行爬虫数据筛选的时候,比如在 B 站进行动漫数据抓取的时候,有很多的 UP 主会对动漫的名字做一定的修改,比如『(xx 字幕组)小林家的龙女仆』或者『小林家的龙女仆(高清)』。按照我之前的处理方式,还是很简单的 KV 存储,所以在计算弹幕和播放量的时候,并没有统计合并这样的数据。而从实际情况上来看的话,这两个的数据是应该统计在一起的。 所以,发现这个算法也是可以用的。而且,这个算法确实挺有意思。 using namespace std; ... [阅读全文]

搜索最近的店铺 or 找最多店铺的点

这两个问题,应该是电商网站或者说 O2O 业务中最常用的功能。在之前,我也想过该题的解决方法。 第一个问题最简单的方法就是,一个 for 遍历周围所有的数据。通过欧式距离的判断,进行从小打大的排序判断,然后推送结果给用户。但是,当商铺基数足够大的时候,似乎,每次的 O(N) 操作,都是一个不小的时间开销。于是,可以通过进行地区的划分进行优化。 比如在二维坐标系中,划分为 N * N 的正方形区域。进行距离判断的时候,只需要查询用户当前区域和周围 8 个区域的店铺,然后进行搜索,然后排序。同时,也可以针对每个区域进行 cache,因为某个区域间的商铺的排序顺序基本不会有太大变化,而且即使是不同的距离,基本也就是 50 ~ 100 米的误差,某种程度上,用户也能接受这样的误差。 所以,这个角度看,似乎是个不错的解决方案,毕竟通过后台的距离判断可以进行离... [阅读全文]

短链的实现

问题的起因是这个: 这是我的刷题日志。当时是 2017.3.4 号,做了这道题之后,一直想写下是否有更好的解题思路。但是一直没(lan)有(lan)时(lan)间(lan)。 正巧今天在复习数据结构的时候看到了 LZW 压缩器。这就可以拉出来好好扯一下了。 其实现在流行的,或者网上的标准操作套路都是使用 hash 的方式,将其对应到几个短的链接上,但是因为毕竟这个属于 hash 映射,在长度变短的情况下,始终会有冲突的危险。所以也就带来了 rehash(cpu 开销和内存开销) 和 hash 表最坏情况(退化为链表结构,查找效率退化成 O(n))的风险。 比如常见的,使用 md5 摘要一把,然后将结果存到一个 hash 表中,这个 hash 表是个抽象的概念,他可以使具象化的数据库,Key-Value Store,或者仅... [阅读全文]

2017 考研小结

考研并不是因为工作不如意,待遇不好,只是我觉得,总得拿个有挑战性的东西玩玩,不然每天总是做重复的工作,太无趣了。而且,一边工作一边考研,未尝不是一件乐事。而且就今年主要就是图个做真题,准备明年认真考。 本来第一天考完就想写的,不过一想到要是考砸了呢?是不是太丢脸了。于是拖到了现在。不过现在查到分数之后也就安心了。数学咋了,英语和政治算是正常发挥。专业课无奈,因为复习时间紧(没辞职,两个月时间)只能放弃 40 分的题目。专心复习剩下的110分。 政治最后是 68 分。比较可惜,毕竟 1000 题这本书,我来来回回刷了 4 次(未复习前一次,复习完之后一次,错题刷一次,二次错题再刷一次)。然而,选择题还是不高,主要是今年全选太多,我太过于谨慎没敢全选。倒是简答题,我也就是临考前两天,开始被肖的 12 套预测卷,基本就是 12 套的所有答案,基本都能背出来(短期强迫... [阅读全文]

Java 引用传递和值传递

前几天有个朋友问了我个问题,就是 Java 中什么时候是值传递什么时候是引用传递。他的理解是,基本数据类型是值传递,复杂对象是引用传递。 所以就有了如下的一个测试代码: public class Main { public static void main(String[] args) { int a = 0; Integer b = 0; System.out.println("int a:" + a); System.out.println("integer b:" + b); changeValue(a, b); System.out.println("int a:" + a); System.out.prin... [阅读全文]

Hexo Gandalfr 主题发布

主题地址: hexo-theme-gandalfr 在线预览: Example 起因:因为之前考虑到英文博客的主题问题,之前一直用 even 主题,但是始终觉得不是特别中意。于是找到了 apollo。 发现这是我比较喜欢的类型。简单,足够简单。但是有两点不足: 文章没有 Tag 提示。 文章中的代码段没有高亮。 在较大屏幕上显示的时候,有点小。(主要内容 600px 是有点小了) 所以这边也就是修改了下,并且打包上传。因为原作者已经停止继续开发了。 安装 # cd to your hexo dir npm install npm install --save hexo-renderer-jade hexo-generator-... [阅读全文]

记一个非常有意思的项目

机缘巧合之下,和朋友聊天的时候,知道他们那有一个基于 Java 的 web 系统。于是,作为一个 Java 功底还算过得去的人,我觉得,应该可以去玩玩。 因为,作为一个 Javaer,说到 Java web 的时候,无外乎 Spring,Struts,Hibernate,或者 MyBatis。于是乎,作为复习,我拿过来看了下。不过第一眼确实是非常惊讶。 因为朋友那边没能拿到相关的文档,没有部署方式和设计方式,所以也是一头雾水。各位可以看下他的目录结构: ├── b2b-api-base ├── b2b-api-content ├── b2b-api-customer ├── b2b-api-lucene ├── b2b-api-mail ├── b2b-api-payment ├── b2b-api-product ├── b2b-api-... [阅读全文]

MJsonViewer v0.1 插件发布

只是另一个使用在火狐上的 JsonView 插件。代码地址:GITHUB 为什么要写这个插件 因为现有的插件并不能很好的满足我的需求。比如火狐的自带的 json 解析器,初看挺好的,但是用的时候会发现比较复杂。并不能很直观的表示数据的类型。 JsonView 插件,之前我一直使用的插件,但是有个不好的地方就是对返回值的头部类型数据校验非常严格,通常面对一些没有明确类型的 json 返回不能很好的解析。之前也写过如何进行配置来避免这个情况,但是,还是不方便。 JsonHandler 插件,功能强大,不过需要自己把 json 数据粘贴进去。不是很方便。 所以,我这边自己给自己写了个 Json 视图插件。 主要的功能点 字体使用 Microsoft YaHei Mono,也... [阅读全文]