
数据结构与算法
算法黑哥
喜欢算法,善于思考
展开
-
堆 python实现
堆可以表示成数组的形式。按照层次遍历N个节点的层数为logN索引为i的结点 的父节点为:(i - 1) // 2索引为i的结点 的左节点为:2i + 1索引为i的结点 的右节点为:左节点索引 + 1 或者2i + 2根节点的值最大最大值在根节点 MAX heap或者做一个最小值在上面 MIN heap由于高度为log n所以从最低层到根节点最多需要log n...原创 2020-01-27 09:51:08 · 378 阅读 · 0 评论 -
贪心算法
原创 2020-01-15 14:39:40 · 198 阅读 · 0 评论 -
二叉树及python代码实现
文章目录二叉树的基本概念二叉树的节点表示以及树的创建二叉树的遍历广度优先遍历(层次遍历)深度优先遍历先序遍历中序遍历后序遍历代码总结二叉树的基本概念二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)二叉树的性质(特性)性质1: 在二叉树的第i层上至多有2^(i-1)个结点(i>0)性质2: 深度为...原创 2019-12-23 22:55:23 · 585 阅读 · 1 评论 -
如何由二叉树序列推出二叉树
由序列推出树:先序:根–》左–》右中序:左–》根–》右后序:左–》右–》根先序遍历,中序遍历,后序遍历,三种遍历中只要给出2种遍历就可以推出树,但是这2种遍历中一定要包含中序遍历才行。只要给出先序就可以判断出所有根,通过各段首元素查看根,第一个元素肯定是整棵树的根。只要给出后序就可以判断出所有根,通过各段末元素查看根,最后一个元素肯定是整棵树的根。...原创 2019-12-23 22:20:06 · 297 阅读 · 0 评论 -
搜索和二分查找 python实现
文章目录搜索二分查找搜索搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,因为该项目是否存在。 搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找二分查找二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将...原创 2019-12-23 22:16:10 · 615 阅读 · 0 评论 -
栈、队列和双端队列 Python3
文章目录栈队列双端队列栈栈只允许在一端进行操作,所以是后进先出即LIFO可以用顺序表实现,也可以用链表实现以下为用顺序表实现的代码class Stack(object): """栈""" def __init__(self): self.__list = [] def push(self, item): """添加一个新的元素it...原创 2019-12-14 19:11:13 · 273 阅读 · 0 评论 -
数据结构与算法(LeetCode高频300题 Python3实现)
文章目录1、课程:Introduction2、课程:数组和动态数组3、课程:递归4、课程:搜索与排序5、课程:二分搜索6、课程:分治法(上)7、课程:分治法(下)8、课程:链表(上)9、课程:链表(下)10、课程:堆栈和队列(上)11、课程:堆栈和队列(下)12、课程:哈希表(上)13、课程:哈希表(下)14、课程:树(上)15、课程:树(下)16、课程:堆(上)17、课程:堆(下)18、课程:图...原创 2019-12-12 09:52:22 · 5161 阅读 · 1 评论 -
链表中快慢指针的妙用 Python
【原链接】1 链表简介说起链表,我们脑海中浮现出它的样子如下图所示,总是一个节点连着下一个节点。因为之前已经有写一篇文章介绍链表了,在这就不赘述了。需要了解的可以点击如下链接链表实战进行观看。2 快慢指针的妙用我们先来简单介绍一下何为快慢指针。快慢指针就是定义两根指针,移动的速度一快一慢,以此来制造出自己想要的差值。这个差值可以让我们找到链表上相应的节点。如果现在对这里的简介不是很理解...原创 2019-12-09 15:50:18 · 865 阅读 · 1 评论 -
双向链表 Python
双向链表每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。代码:class Node(object): """结点""" def __init__(self, item): self.elem = item self.next = None s...原创 2019-12-08 21:17:37 · 173 阅读 · 0 评论 -
单链表 python详解
文章目录链表为什么需要链表链表的定义单向链表节点实现单链表的操作单链表的实现头部添加元素尾部添加元素指定位置添加元素删除节点查找节点是否存在测试链表与顺序表的对比链表为什么需要链表顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。链表的定义链表(Linked l...原创 2019-12-07 17:44:57 · 588 阅读 · 0 评论 -
链表 Python(后续更新)
一、链表 1. 链表的必备知识要点(包括基础知识、刷题中使用的STL等知识) 2. 链表逆序(LeetCode 92 ,206. Reverse Linked List 1,2) 3. 求两个链表的交点(LeetCode 160. Intersection of Two Linked Lists) 4. 链表的节点交换(LeetCode 24. Swap Nodes in P...原创 2019-12-04 16:05:27 · 174 阅读 · 0 评论 -
python数据结构与算法
课程链接【点这里】配套的全部课件源码链接:https://pan.baidu.com/s/1DbNXI1W_i8gni1Fqz6CWbQ提取码:p7mu给我点个关注 就是对我最大的支持原创 2019-12-03 13:49:48 · 1120 阅读 · 3 评论 -
面试常考排序算法精华总结 python3.7实现
文章目录六大必考排序算法冒泡排序选择排序插入排序快速排序归并拍寻希尔排序其他排序算法几乎不考六大必考排序算法冒泡排序先写代码,后续补充上解题思路,以及代码写法def bubble_sort1(li): for k in range(len(li)-1): for i in range(len(li)-1-k): if li[i]>l...原创 2019-11-26 14:45:07 · 1107 阅读 · 3 评论 -
1 引入概念
引入先来看一道题:如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?第一次尝试import timestart_time = time.time()# 注意是三重循环for a in range(0, 1001): for b in range(0, 1001): for c in ...原创 2019-07-21 18:41:43 · 258 阅读 · 0 评论