![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Data structure & Algorithm
文章平均质量分 94
refresh&grow
这个作者很懒,什么都没留下…
展开
-
剑指Offer -- Python版
第2章 面试基础知识2.2 编程语言面试题2 使用Python实现单例模式单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。其...原创 2018-07-18 00:06:49 · 841 阅读 · 0 评论 -
数据结构与算法分类练习--动态规划
动态规划算法通常基于一个递推公式[状态转移公式]及一个或多个初始状态[边界]。 当前子问题的解将由上一次子问题的解[最优子结构]推出。使用条件:当问题具有“最优子结构”、“子问题重叠”、“边界”时,就可以用动态规划求解。动态规划和贪心算法的区别:贪心不能保证求得的最后解是最佳的;不能用来求最大或最小解问题; 下面以找钱为例对两个算法进行对比:如何用1,5,11三种面额的纸币找...原创 2018-08-05 23:17:41 · 256 阅读 · 0 评论 -
数据结构与算法分类练习--二分查找 二叉排序 位操作
在有序表中查找元素常常使用二分查找(Binary Search),又称折半查找。套路总结# 这里必须是<=,保证可以检测到最后一个数值while (left <= right) { # 在其它语言中直接使用(left + right) / 2可能会超出边界值 > 2^32,但在python中,超出机器自身所能支持的范围时,会自动转换大数计算。 int mi...原创 2018-07-31 23:09:45 · 354 阅读 · 0 评论 -
数据结构与算法分类练习--DFS BFS
深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,不全部保留结点,占用空间少;有回溯操作(即有入栈、出栈操作),运行速度慢。广度优先遍历:又叫层次遍历,从上往下对每一层依次访问,在每一层中,从左往右(也可以从右往左)访问结点,访问完一层就进入下一层,保留全部结点,占用空间大; 常用优先队列,无回溯操作,运行速度快。Number of Islands 小岛数量Given a 2d...原创 2018-08-04 23:52:42 · 331 阅读 · 0 评论 -
数据结构与算法分类练习--贪心算法
贪心算法是解决最优化问题的一种方法,解决过程中总是做出当下(局部)最好的选择,因为具有最优子结构的特点,局部最优解可以得到全局最优解;最优子结构最优子结构反映了分解问题的方式,我们在解决问题的时候,都会尝试将问题分解成子问题,进而会产生局部解(总体解的子结构)。通常局部解不止一个,当局部解是局部最优解,并且该局部最优解是全局最优解的一部分时,我们称子问题的最优解为 最优子结构。求解步骤...原创 2018-07-26 23:39:04 · 827 阅读 · 0 评论 -
数据结构与算法分类练习--树 图
生产力专家说,突破是通过“非线性”来思考的,树就是计算树中最重要的非线性数据结构之一。树结构确实是数据组织中的一个突破,因为它们允许我们实现比使用线性数据结构(如基于数组的列表或链表)快很多的算法。树的主要的用途是用来提高查找效率,如二叉排序树、FP-树。另外可以用来提高编码效率,如哈弗曼树。 树也为数据提供了自然的组织,因此在文件系统、图形用户界面、数据库、网站和其他计算机系统中已经成为无处不在...原创 2018-07-29 23:56:31 · 494 阅读 · 0 评论 -
数据结构与算法分类练习--栈 队列 堆
栈LIFO: last-in, first-out 后进先出。两种操作:PUSH--压入;POP--弹出。python中可以使用list来实现栈。PUSH操作相当于list.append(x),POP操作相当于list.pop()。队列FIFO: first-in, first-out 先进先出。队列有队头和队尾,当一个元素入队时,被放在队尾的位置;而出队的元素则总是在队头的那个。...原创 2018-07-26 00:54:21 · 249 阅读 · 0 评论 -
数据结构与算法分类练习--递归 回溯 分治
递归是在运行过程中调用自己,最常见的例子就是斐波纳契数列。递归算法的优点是它能使一个蕴含递归关系且结构复杂的程序简介精炼, 增加可读性. 缺点是每一级递归都需要调用函数, 会创建新的栈,随着递归深度的增加, 创建的栈越来越多, 效率低, 让费内存空间. 解决方案是把递归转换为尾递归。尾递归基于函数的尾调用, 每一级调用直接返回函数的返回值更新调用栈,而不用创建新的调用栈, 类似迭代的实现, 时间和...原创 2018-07-28 17:00:15 · 372 阅读 · 0 评论 -
Python数据结构与算法分类练习--链表
在有些情况下,存储数据的内存分配不能位于连续的内存块中。 通过指针将其中数据和数据元素的下一个位置的地址都存储起来,这样从当前数据元素的值中就知道下一个数据元素的地址。通常这样的结构被称为指针,而在Python中称为节点。class Node(object): def __init__(self, x): self.data = x self.next...原创 2018-07-25 01:10:31 · 512 阅读 · 0 评论 -
数据结构与算法分类练习--字典 字符串
字典是Python语言中唯一的映射类型。格式为:d = {key1 : value1, key2 : value2 }映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表。字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。字典类型与序列类型(列表,元组)的区别是存取和访问数据的方式不同...原创 2018-08-02 23:27:14 · 250 阅读 · 0 评论