自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

guoziqing506的博客

记录学习点滴,享受算法乐趣

  • 博客(18)
  • 收藏
  • 关注

原创 堆的实现与优先队列

堆(Heap)这种数据结构对我们来说是极为有用的。因为它可以非常方便地帮我们完成高效的动态的排序。接下来,我将给出堆的原理以及实现堆的具体操作。先看一下堆的结构,在此,只需要牢记两点:1. 堆是一棵完全二叉树2. 堆中每个节点都大于等于其任何子节点所谓完全二叉树,一定要满足这个特征:这棵树除最后一层外,每一层都是满的,且最后一层如果不满,所有节点都位于最左边。看下图

2016-08-31 09:34:18 887

原创 Python--函数式编程

函数式编程就是一种抽象程度很高的编程范式。这个概念有些抽象,简单理解的话,只需要记住一点:函数式编程的一大特点是允许把函数本身作为参数传入另一个函数,还允许返回一个函数!Python并不是一种函数式编程语言,但是却为函数式编程提供了部分支持。下面,我将举一些在Python中常用的函数式编程的例子。高阶函数所谓高阶函数,是可以接收另一个函数作为参数的函数。这个听起来有点新奇,因为一般

2016-08-29 21:15:53 1014

原创 lintcode - 旋转图像

题目描述:给定一个N×N的二维矩阵表示图像,90度顺时针旋转图像。样例:给出一个矩形[[1,2],[3,4]],90度顺时针旋转后,返回[[3,1],[4,2]]具体怎么转化,大家都知道,现在看看能不能有什么技巧能够使得代码写起来更容易,同时能够支持原地翻转。实际上,对于这种翻转90度的情况,可以这样处理:先按副对角线翻转元素,再按水平中线翻转矩阵的行。如下图所示:

2016-08-29 15:00:13 889 1

原创 lintcode - 图中两个点之间的路线

题目描述:给出一张有向图,设计一个算法判断两个点 s 与 t 之间是否存在路线。样例:如下图,for s = B and t = E, return truefor s = D and t = C, return false题中的数据结构时有向图,关于有向图的定义其实看下面的代码就很容易明白了:class DirectedGraphNode: d

2016-08-29 09:50:22 1290

原创 Python--函数

函数是对程序逻辑进行结构化或过程化的一种编程方法。其实,说简单一点,就是我们将完成某项功能的运算封装在一个单独的结构内。这样,将代码隔离成易于管理的小块,在实现大的功能时,再调用这些小块即可。很明显,函数的使用使得代码的意图更加清晰,同时,也大大方便了程序调试的过程。当然,函数的知识并不像列表,字典这些数据类型那样系统,而是分散的。所以,我在这篇博文中只是写一些需要注意的小点。算是自己的一个备

2016-08-29 08:54:31 3143

原创 lintcode - 丑数 II

题目描述:设计一个算法,找出只含素因子2,3,5 的第 n 大的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...我们可以认为1也是一个丑数样例:如果n = 9, 返回 10之前,做过一道类似的题目:丑数。题目的要求是判别一个整数是不是丑数。而本题的目的是计算第n个丑数是多少。所以,一种朴素的思路是这样:设定一个计数器,初始为0. 然后从

2016-08-28 19:38:05 2899 1

原创 lintcode - 丑数

题目描述:写一个程序来检测一个整数是不是丑数。丑数的定义是,只包含质因子 2, 3, 5 的正整数。比如 6, 8 就是丑数,但是 14 不是丑数以为他包含了质因子 7。可以认为 1 是一个特殊的丑数。样例:给出 num = 8,返回 true。给出 num = 14,返回 false。显然,这是一个新颖的概念,在传统的数学概念里,找不到“丑数”这个概念,但是这

2016-08-28 19:10:46 1750

原创 lintcode - 矩阵归零

题目描述:矩阵归零。给定一个m×n矩阵,如果一个元素是0,则将其所在行和列全部元素变成0。需要在原矩阵上完成操作。样例:给出一个矩阵[  [1, 2],  [0, 3]]返回[  [0, 2],  [0, 0]]难点在与我们需要对矩阵中为0的元素的位置做一个记录,然后在根据这个记录将相应的位置全部变为0. 而如果先不做记录,而

2016-08-28 08:55:51 1512 2

原创 Python--读写CSV文档

CSV是英文Comma Separate Values(逗号分隔值)的缩写,顾名思义,文档的内容是由 “,” 分隔的一列列的数据构成的。我的理解,CSV文档是一种编辑方便,可视化效果极佳的数据存储方式。而Python中有着非常强大的库可以处理这种文档,所以,如果你经常用Python处理数据的话,CSV文档当然是一种简单快捷的轻量级选择。下面我将简单介绍CSV文档,以及Python是如何对CSV文档

2016-08-26 09:02:46 159961 5

原创 lintcode - 落单的数 III

题目描述:给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。样例:给出 [1,2,2,3,4,4,5,3],返回 1和5挑战 :O(n)时间复杂度,O(1)的额外空间复杂度我们之前已经做过两道类似的题目,分别是落单的数,落单的数 II,思路都是位运算。这道题也不例外。不过这道题想出方法来倒还真不太容易,至少我当时没想出来,也是后来

2016-08-17 15:53:45 1456

原创 落单的数 II

题目描述:给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。样例:给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4题目的挑战还是在于一次遍历,常数级的额外空间复杂度。之前当有2 * n + 1 个数的时候的做法我们已经探讨过了(详见:点击打开链接),用的是位运算的异或,这里,还是用相同的思路。只不过对处理三个相同元素的情况,好像没有类

2016-08-14 09:31:31 990

原创 落单的数

题目描述:给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例:给出 [1,2,2,1,3,4,3],返回 4这道题本身当然不难。难的是通过一次遍历,常数级的额外空间复杂度,解决问题。所以,第一次碰到这个题目时,确实比较费劲。因为他的解法是比价特殊的,也是非常经典的。那就是位运算。思路可以这样设计,既然位运算中“异或”的操作能消

2016-08-13 17:12:40 1211

原创 二叉查找树中搜索区间

题目描述:给定两个值 k1 和 k2(k1 样例:如果有 k1 = 10 和 k2 = 22, 你的程序应该返回 [12, 20, 22].递归+深搜的思路。之前,像类似于“二叉树的所有路径”(详见:点击打开链接)这样的问题用的也是这种思路。应该不会陌生了。用一个结果列表result存储节点值,因为result中需要不断添加新元素,所以,为了方便,干脆再建立一个辅助函数

2016-08-13 10:40:32 3098 1

原创 字符串查找

题目描述:对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。样例:如果 source = "source" 和 target = "target",返回 -1。如果 source = "abcdabcdefg" 和 target = "bcd",返回 1。

2016-08-12 18:39:29 1727

原创 简单理解KMP算法

KMP算法是迄今为止最为高效的字符串匹配算法。当然,在KMP算法出现之前,有关字符串的匹配问题当然经过了一个漫长的探索过程。从一开始最简单的朴素字符串匹配算法,到Rabin-Karp算法,再到有限自动机算法等等,可以说任何一个伟大算法的诞生都不可能是一朝一夕之功,在它之前一定有大量的理论及实验的基础。所以,想要彻底理解KMP算法最好是从头开始,对整个字符串的匹配问题有个完整的了解。但是,我在这篇博文

2016-08-09 14:53:41 1419 1

原创 Python--集合

集合类型其实就是一组数据构成的整体,Python中,集合类型被作为跟数组,字典一样的内建类型存在。一种比较标准的解释是:“集合对象是一种无序排列的可哈希的值”。字典的讲解中,我们也提到了可哈希的概念,这里也是一样,换句话说,集合中的元素跟字典的键一样,都是唯一的。集合的创建先来看看如何创建一种集合类型。和列表,字符串这些类型一样,集合的创建方法也是两种: 直接赋值和 set() 函数a

2016-08-07 20:00:51 1242

原创 Python--浅拷贝和深拷贝

之前,我在博文Python–内存管理中说明了Python中对象赋值的问题,我们已经知道,当创建一个对象,并且把这个对象赋值给另一个变量的时候,其实并没有拷贝这个对象,而只是给这个对象增加了一个引用(这一点具体可以参见链接给出的博文中“引用计数”这一节)复习一下,比如下面的例子这里写代码片

2016-08-03 10:58:59 1104

原创 Python--字典

字典是Python中唯一的映射类型。所谓映射,其实就是一种对应关系的表述,在字典中,这种映射关系也被叫做“键值对”。也就是说,字典这种结构的每一个元素,都是由两个对象之间的对应关系构成的,这两个对象,一个叫做“键”(key),另一个叫做“值”(value)。而这种映射关系是一种多对一的关系,一个键所指向的值是唯一的,一个值所却可被多个键指向。一个简单的例子是班上学生某次考试的成绩,学生的学号就可以

2016-08-02 17:24:29 1706

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除