随笔分类 -  数据结构

关于数据结构的学习,一些个人的学习笔记总结
摘要:python 装饰器 描述 python 中一切皆对象,函数也可以当作参数传递 装饰器就是接受一个函数作为参数,添加功能后返回一个新函数的函数或类。 python 中使用 @ 来使用装饰器。(@ 只是装饰器的语法糖,可以等价替代为其他) 装饰器经常用到的功能就是在代码中添加 log 日志。 实例 下 阅读全文
posted @ 2019-05-08 12:49 希希里之海 阅读(217) 评论(0) 推荐(0)
摘要:leecode刷题(31) 回文数 回文数 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 示例 2: 示例 3: 进阶: 你能不将整数转为字符串来解决这个问题吗? 思路 关于字符串的题目, 双端遍历法 可以解决很多问题。这里虽然是整数,但是我们 阅读全文
posted @ 2019-05-06 22:16 希希里之海 阅读(250) 评论(0) 推荐(0)
摘要:TOPK 问题 描述 如从海量数字中寻找最大的 k 个,这类问题我们称为 TOPK 问题,通常使用堆来解决: 求前 k 大,用最小堆 求前 k 小,用最大堆 例子 现有列表 , 求前 2 个大的元素。 如传入列表和 k = 2,输出 。 思路 1. 先放入元素前 k 个建立一个最小堆 2. 迭代剩余 阅读全文
posted @ 2019-05-06 21:30 希希里之海 阅读(1133) 评论(0) 推荐(0)
摘要:leecode刷题(30) 二叉树的后序遍历 二叉树的后序遍历 给定一个二叉树,返回它的 后序 遍历。 示例: 思路 跟上道题一样,我们使用递归的思想解决。 后序遍历: 先处理左子树,然后是右子树,最后是根 代码如下 Java 描述 python 描述 总结 对比如下: 阅读全文
posted @ 2019-05-06 21:27 希希里之海 阅读(296) 评论(0) 推荐(0)
摘要:leecode刷题(29) 二叉树的中序遍历 二叉树的中序遍历 给定一个二叉树,返回它的 中序 遍历。 示例: 思路 跟上一道题一样,用递归的思想很快就能解决。 中序遍历: 先处理左子树,然后是根,最后是右子树。 代码如下 Java 描述 python 描述 总结 对比如下: 阅读全文
posted @ 2019-05-06 21:26 希希里之海 阅读(292) 评论(0) 推荐(0)
摘要:leecode刷题(28) 二叉树的前序遍历 二叉树的前序遍历 给定一个二叉树,返回它的 前序 遍历。 示例: 思路 这道题我们用递归的思想很容易就能解出来。前序遍历,我们先处理根,之后是左子树,然后是右子树。 代码如下 Java 描述 python 描述 总结 两门语言的代码量差不多,用递归几行就 阅读全文
posted @ 2019-05-06 21:25 希希里之海 阅读(395) 评论(0) 推荐(0)
摘要:leecode刷题(27) 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 思路 以前做过合并两个有序链表的问题,所以刚开始想到的解法与之类似,我们可以先合并两个有序链表,再用合并的新链表去合并第三个链表: 其实如果我们学习过堆相关 阅读全文
posted @ 2019-05-06 12:56 希希里之海 阅读(264) 评论(0) 推荐(0)
摘要:leecode刷题(26) 用栈实现队列 用栈实现队列 使用栈实现队列的下列操作: push(x) 将一个元素放入队列的尾部。 pop() 从队列首部移除元素。 peek() 返回队列首部的元素。 empty() 返回队列是否为空。 示例: 说明: 你只能使用标准的栈操作 也就是只有 , , , 和 阅读全文
posted @ 2019-05-05 12:49 希希里之海 阅读(238) 评论(0) 推荐(0)
摘要:leecode刷题(23) 合并两个有序链表 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 思路: 这道题我们可以用递归的方法来处理。首先我们可以设置一个临时头节点 head,当链表 l1 和链表 l2 不为空时,对它们进行比 阅读全文
posted @ 2019-05-04 10:57 希希里之海 阅读(285) 评论(0) 推荐(0)
摘要:leecode刷题(24) 翻转二叉树 翻转二叉树 翻转一棵二叉树。 示例: 输入: 输出: 备注: 这个问题是受到 "Max Howell " 的 "原问题" 启发的 : 谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。 阅读全文
posted @ 2019-05-04 10:53 希希里之海 阅读(343) 评论(0) 推荐(0)
摘要:排序算法 冒泡排序 原理:把相邻的元素两两比较,根据大小来交换元素的位置。 原始的冒泡排序是稳定排序。由于该排序的每一轮要遍历所以元素,轮转的次数和元素数量相当,所以时间复杂度是 O(N^2)。 java代码表达如下: (使用双循环来进行排序。外部循环控制所有的回合,内部循环代表每一轮的冒泡处理,先 阅读全文
posted @ 2018-12-15 16:03 希希里之海 阅读(338) 评论(0) 推荐(0)
摘要:一 (基本概念) 1.图的定义:图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。 2.与线性表、树的比较:(1)线性表中我们把数据元素叫元素,树中将数据元素叫结点,在图中数据元素,我们则称之为顶点。(2)线性表中 阅读全文
posted @ 2017-06-02 21:49 希希里之海 阅读(2281) 评论(0) 推荐(0)
摘要:树(一对多的数据结构) 树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树种: (1)有且仅有一个特定的称为根(Root)的结点; (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、......、Tn,其中每一个集合本身又是一棵树,并且称为根的子 阅读全文
posted @ 2017-05-15 22:52 希希里之海 阅读(9274) 评论(0) 推荐(0)
摘要:串的定义 1.串:串是由零个或多个字符组成的有限序列,又名叫字符串。 2.串的比较:串的长度以及它们各个对应位置的字符都相等时,才算相等。给定两个串:s=“a1a2......an”, t=“b1b2……bm”, 当满足以下条件之一时,s<t。a.n<m, 且ai=bi(i=1,2,......,n 阅读全文
posted @ 2017-05-13 15:34 希希里之海 阅读(708) 评论(0) 推荐(0)
摘要:栈与队列 栈是限定仅在表尾(栈顶)进行插入和删除操作的线性表(后进先出)。队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表(先进先出)。 栈(Stack): 1.下标为0的一端作为栈底比较好,因为首元素都存在栈底,变化最小,所以让它作为栈底。定义一个top变量来指示栈顶元素在数组中的位 阅读全文
posted @ 2017-05-07 17:01 希希里之海 阅读(1000) 评论(0) 推荐(0)
摘要:1.基础概念: *数据((数据对象(数据元素(数据项))) 包含关系。 *数据结构是互相之间存在一种或多种特定关系的数据元素的集合。 *逻辑结构:集合机构,线性结构,树形结构,图形结构。 *物理结构:顺序储存结果、链接储存结构。 2.算法效率问题: *判断一个算法的效率时,函数中的常熟和其他次要项常 阅读全文
posted @ 2017-05-01 22:35 希希里之海 阅读(1017) 评论(0) 推荐(0)