- 博客(161)
- 资源 (1)
- 收藏
- 关注
原创 Redis源码:dict数据结构(声明)
Redis的dict,译为“字典”,犹如Python里的字典,底层是用哈希表实现的,好的实现可以达到O(1)的时间复杂度。
2017-04-06 18:07:27
1082
原创 图的两种表示和接口
常读常新,这里多分析了三个点: 1. 两种表示方式在另一个维度的比较; 2. 一种复杂应用场景下的取舍办法; 3. 经典表示方法之外的黑科技。
2017-02-05 09:05:45
1419
原创 话说智能指针发展之路
动态创建内存的管理太麻烦,于是乎,这个世界变成11派人: 一派人勤勤恳恳按照教科书的说法做,时刻小心翼翼,苦逼连连; 一派人忘记教科书的教导,随便乱来,搞得代码处处bug,后期维护骂声连连; 最后一派人想了更轻松的办法来管理动态申请的内存,然后悠闲唱着小曲喝着茶~
2016-11-25 23:16:10
3410
4
原创 shared_ptr循环引用的例子及解决方法示例
之前看到循环引用的时候,总是只能看到一个很简单的例子,我觉得挺没意思,因为没有实际的意义,就想找个好点的例子来分享。所以,这篇文章将专注于展示一个更实际点的例子来说明实际工作中确实会碰到shared_ptr的循环引用的问题,然后再展示如何使用weak_ptr来解决。
2016-11-25 22:29:20
7984
1
原创 ubuntu没声音?
前言:我装了双系统(目前是win10 + ubuntu 16.04),经常会遇到耳机没声音,或者扬声器没声音的情况。在win10那边也会有。
2016-10-29 16:56:07
1995
原创 在单链表上实现插入排序
问题:给单链表排序(升序排列,要保持稳定性),要求通过改变结点的next指针从而改变结点的位置,而不是只交换结点的值来使得其有序!时间复杂度为O(N^2),空间复杂度为O(1)。
2016-09-17 20:10:29
10177
原创 单例模式:茴香豆的七种写法
之前看一个朋友在学Java,顺口问他,你会设计模式吗? 他说知道一点吧。 然后我就问,那你会几种单例模式的写法吗? 他说,你这个孔乙己。
2016-09-17 17:58:22
2198
原创 用迭代实现归并排序
最近在知乎上看到一个帖子,总结了各种常见的排序算法,并用python一一实现了,不过归并排序的迭代写法,题主说他不会写,我就试了一下,其实很简单。下面会先分析递归的时候实际上做了哪些事,然后迭代如何重现这些事。先用C++写,因为估计看这篇博客的大部分人对C++比较熟,最后会分享python的版本,实现过程基本一模一样。
2016-09-08 15:55:18
6997
2
原创 合法的ipv4地址:对比大师级代码
如题,ipv4地址的“点分十进制”的格式是:1.2.3.4,十进制的数字必须在[0, 255]之间。先po我自己的代码,再对比大师们的代码。
2016-08-31 17:55:32
4109
原创 Google笔试:Watson and Intervals
这是今年(2016)google校招的笔试题(Round B的C题),难度比acm的低,但是也不简单。 题意:给你一堆区间,让你选择一个来去掉,使得剩下的区间覆盖到的整数点最少。
2016-08-30 13:04:10
1102
原创 区间覆盖与合并
问题最近打google的apactest,遇到一个经典的(但我不熟的)问题——给你一堆整数区间(比如[1, 3], [2, 6], [8, 10]),问它们合并后是怎样的? 比如上述三个区间合并后就变成:[1, 6], [8, 10]。这个问题在leetcode上的难度评级是Hard,简直亮瞎啊,其实并不难呀。
2016-08-30 11:31:29
6017
1
原创 《剑指offer》:自己写一个pow函数
今天打google在codejam上办的apactest,成绩还行吧(最后排名540),第二题逗比了,自己逻辑后来理清楚,但是代码还是原来的想法,wa了两次才找到了bug。 第二题需要实现一个整数的pow函数,之前只会递归的写法,今天学会了迭代的写法,回想《剑指offer》里也有类似的东西,所以整理成这篇博客。
2016-08-30 10:58:50
3592
原创 算法导论:红黑树
算法导论的红黑树讲解很好,插入的调整比较容易懂,但是删除的调整就有点难懂了,书里也没证明为什么那样做就能够保持性质(留做练习题了),虽然可以理解过程。比较好玩的一点是,比较上次写的二叉搜索树,随机插入1000000个结点是二叉搜索树高度为48(不稳定,很容易变到50+),而红黑树的高度为24(很稳定)!而log2(1000000) = 20,也可以说明红黑树的平衡性确实是比较好的!
2016-08-26 20:42:54
868
原创 算法导论:二叉搜索树模板
今天看了算法导论的第12章《二叉搜索树》,觉得里面的过程的伪代码很精巧,过程讲解也很仔细易懂,所以就写下这个二叉搜索树模板。树类数据结构的关键操作是插入和删除,查找和遍历相对而言技巧性和难度一般吧。
2016-08-25 19:13:17
777
原创 《剑指offer》合并两个有序的数组
题意:给定两个升序的数组,v1有足够的空间可以容易v1和v2的所有元素。要求将v1和v2的元素合并成一个升序的数组,并且时间复杂度为O(n+m),而空间复杂度为O(1)。
2016-08-24 19:37:17
1836
1
原创 《剑指offer》4:替换空格
题意:给定一个字符串,将其中的所有空格都替换成”%20”三个字符,比如“I am happy.”将会变成”I%20am%20happy.”,假设给定的指针所指向的内存是够用的,然后O(1)空间和O(n)时间。
2016-08-24 19:19:38
621
原创 Leetcode:Find Minimum in Rotated Sorted Array II
Leetcode:Find Minimum in Rotated Sorted Array II,第二版本只是多了一个限制:数组里可以有重复的元素
2016-08-24 12:11:33
503
原创 Leetcode: Find Minimum in Rotated Sorted Array
题意:定义翻转有序数组:一个升序数组,从中间某个元素切开,把左右两部分互换位置。 比如[1, 2, 3, 4, 5, 6, 7]从3处切开……
2016-08-24 11:46:58
569
原创 leetcode: Combination Sum III
题意:给定数字的个数k和总和n,要求从[1-9]中选取k个各不相同的数字组合,其总和刚好等于n,返回所有组合情况思路无脑DFS,即使遍历所有情况,也就是O(n^k)。
2016-08-23 23:18:24
669
原创 leetcode: String to Integer (atoi)
String to Integer (atoi),这道题放在leetcode上,多了一些需求,要求处理非法字符,其实是经典的字符串提取操作。
2016-08-23 17:38:51
645
原创 《剑指offer》45:约瑟夫问题
约瑟夫问题这个问题太经典了,就是n个人围成一圈,编号依次为0,1,…,n-1,每m个人取一个人退出游戏,求最终剩下的人的编号是多少?思路1:模拟自己随便手写个循环链表来模拟(不过写得太丑啦)思路2:用数学推导规律
2016-08-22 16:08:36
517
原创 《剑指offer》44:扑克牌里的顺子
问题给定一个5个元素的数组(范围0-13,对应扑克牌的),其中0可以代表任何数字,求这5个数字能否组成一个顺子(即连续的5个数字,如2,0,4,5,0可以表示2,3,4,5,6)
2016-08-22 15:43:58
509
原创 《剑指offer》43:n个骰子的点数
这道题其实也不难,递归的想法很简单,之所以写这篇博客,是因为我觉得书中的递归代码写得有点混乱(并没有贬低作者的意思),所以贴一下我自己认为比较好的写法
2016-08-22 13:52:16
775
原创 《剑指offer》42:翻转单词顺序
这个单元有两道题,都是字符串操作,挺简单的,不过如果没经历过思考的过程,可能就不是那么容易了,简单 != 容易
2016-08-21 19:53:13
892
原创 打印所有和为s的连续正整数序列(至少含两个数)
今天看了《剑指offer》里的这道题,发现如果利用好等差数列的性质,其实可以有更好的解法!题意比如,s=15,那么应该输出以下三个序列: 7 + 8 = 15 4 + 5 + 6 = 15 1 + 2 + 3 + 4 + 5 = 15剑指offer的解法从1开始,枚举序列的第一个数字,然后顺序递增,直到找到或超过了s。 比如s=9,那么搜索过程是: start=1, end=2
2016-08-15 14:29:58
640
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人