
数据结构与算法
写代码的阿呆
每天保持进步就是最大的进步!
展开
-
买卖股票的最佳时机及其变形
买卖股票的最佳时机及其变形1 题1:面试题1.1 问题1思路1.2 问题1代码实现1.3 问题2思路1.4 问题2代码实现2 题2:只能完成一笔交易2.1 思路1:暴力解法2.2 思路2:一次遍历3 题3:能完成多笔交易3.1 思路4 参考1 题1:面试题给定一个数字v代表开始有多少钱,一个数组代表股票每天的价格。Q1:请问最多只能买一次、卖一次的情况下,最大化利润是多少?Q2:不限制买卖次数的情况下,利润可以达到多少呢?样例:输入:1000[100,80,120,130,70,60,原创 2020-10-21 21:06:19 · 189 阅读 · 0 评论 -
数据结构与算法 | 归并排序
什么叫归并排序?1 什么叫归并排序?2 代码实现2.1 思路2.2 代码2.3 代码拆解3 算法时间复杂度4 算法稳定性参考1 什么叫归并排序?什么叫归并排序呢?这也是我们排序算法中目前最后一个,后面可能还会有补充!归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组。基本思路是比较两个数组的最前面的数,谁小...原创 2019-07-09 16:38:17 · 359 阅读 · 0 评论 -
数据结构与算法 | 排序算法汇总
排序算法汇总1 前言2 排序算法对比3 排序算法博客汇总参考1 前言排序算法算是自己数据结构方面第一个接触的完整的算法,跟着b站的视频也总结了几篇排序算法的博客,下面进行一个梳理。2 排序算法对比上一个图:其中用的比较多的就是 快速排序!因为其时间较快,应用广泛,虽然最坏情况下为O(n2)O(n^2)O(n2)平方复杂度,但是更多的还是O(nlogn)O(nlogn)O(nlogn),...原创 2019-07-09 16:50:29 · 265 阅读 · 0 评论 -
数据结构与算法 | 二分查找
二分查找1 前言2 什么叫二分查找?3 代码实现3.1 递归版本3.2 非递归版本4 时间复杂度5 知识点补充参考1 前言关于二分查找,首先来看一个段子,见下图:有点意思,虽然是个段子,但是大妈查找有问题书的方式其实就是今天我们要说的二分查找!也叫折半查找!下面就跟随小编的角度来具体看看什么叫二分查找吧!2 什么叫二分查找?搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常...原创 2019-07-10 10:49:24 · 459 阅读 · 2 评论 -
数据结构与算法 | 二叉树
什么叫树?二叉树?Python实现?1 什么叫树2 树的术语3 树的种类4 数的存储方式5 树的应用场景6 二叉树6.1 概念6.2 性质7 代码实现二叉树7.1 定义二叉树的节点7.2 往二叉树添加元素7.3 二叉树的遍历7.4 知识点补充8 给出一个序列 如何画出树参考1 什么叫树树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质...原创 2019-07-14 15:38:51 · 610 阅读 · 0 评论 -
数据结构与算法 | 汇总
阶段总结汇总1 前言2 博客汇总3 接下来的计划参考1 前言经过应该快1个月的时间,结合着b站系列视频(见下面参考链接)以及小灰的《漫画算法》这本书,将数据结构与算法算入了个门,剑指offer刷了几题,但还远远不够,也是接下来要重点发力的!下面先把自己之前数据结构与算法所记录的笔记进行一个汇总整理!2 博客汇总大概有4大块:基本概念篇+基本结构篇+排序算法篇+查找篇!1、基本概念篇...原创 2019-07-14 15:54:30 · 470 阅读 · 0 评论 -
数据结构与算法 | 冒泡排序
什么是冒泡排序?1 前言2 什么是冒泡排序?2.1 名称理解2.2 动图理解2.3 单次循环遍历图片理解3 代码实现3.1 递归3.2 双层循环3.3 增大数据量看是否会有差异参考1 前言从本篇开始,开始一系列排序算法的博客,经常看到面经中会手写什么排序算法,学起来!今天首先开始学习的是冒泡排序!2 什么是冒泡排序?2.1 名称理解从名称理解一波:冒泡排序,冒泡?相信大家喝汽水饮料的时...原创 2019-07-04 20:34:59 · 564 阅读 · 0 评论 -
剑指offer | 11 斐波那契数列
斐波那契数列1 题目2 思路及代码3 拓展3.1 拓展1 跳台阶3.2 题目拓展2:变态跳台阶参考[待补充]1 题目大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=392 思路及代码思路1: 先定义一个空list,直接用循环往里面append!然后取数!代码:# -*- coding:utf-8 -*-cl...原创 2019-07-04 21:32:39 · 251 阅读 · 0 评论 -
数据结构与算法 | 选择排序
选择排序是个什么东东?1 什么是选择排序2 代码实现3 算法稳定性参考1 什么是选择排序啥也不说了,首先上两个牛逼的动图:以及:从上面两个动图可以看出选择排序的思想为:将数据分为两部分 一部分是已排序ok的 另一部分是未排序的遍历每一个位置,设置两个变量:一个记录位置,一个记录最小值固定某一个位置的时候,初始化其也为最小值,遍历后面每个位置,和最小值进行比较,若小,则记录新的最...原创 2019-07-07 00:39:55 · 171 阅读 · 0 评论 -
数据结构与算法 | 插入排序
聊聊插入排序1 什么叫插入排序1.1 原理1.2 图解2 插入排序和选择排序的关系3 代码实现4 时间复杂度5 算法稳定性参考1 什么叫插入排序1.1 原理插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步...原创 2019-07-07 14:02:38 · 254 阅读 · 0 评论 -
剑指offer | 5题
题1:重建二叉树题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:重建二叉树返回的结果是依次打印出二叉树的根节点,肯定要用到递归的思想先根据前序list找到根节点以及其索引然后在前序和...原创 2019-07-25 12:05:58 · 321 阅读 · 0 评论 -
剑指offer | 链表问题汇总
链表问题汇总1 前言2 题目题1 链表中倒数第k个结点1 前言2 题目题1 链表中倒数第k个结点输入一个链表,输出该链表中倒数第k个结点。思路:如果输出链表正向的第k个结点会吗?应该会的!那么再得到长度,一减,就ok了啊!但是上面思路太麻烦,有一个非常牛逼的思路!牛逼思路:我们可以定义两个指针。第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动;从第k步开...原创 2019-08-02 14:58:32 · 812 阅读 · 0 评论 -
剑指offer | 数组问题汇总
数组问题汇总1 前言2 题目2.1 调整数组顺序使奇数位于偶数前面2.1.1 思路12.1.2 代码12.1.3 思路22.1.4 代码22.2 数组中出现次数超过一半的数字2.2.1 思路12.2.2 代码12.2.3 思路22.2.4 代码21 前言2 题目2.1 调整数组顺序使奇数位于偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,...原创 2019-09-07 02:15:16 · 566 阅读 · 0 评论 -
剑指offer | 9 用两个栈实现队列
用两个栈实现队列1 题目2 思路及解析1 题目用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。2 思路及解析思路1:一个为入栈 一个为出栈代码:感觉逻辑没问题的 但是没有调试成功 还不知道为啥# -*- coding:utf-8 -*-class Solution: # 先初始化 def __init__(self): ...原创 2019-07-04 01:45:33 · 175 阅读 · 0 评论 -
剑指offer | 5 替换空格 + 6 从尾到头打印链表
替换空格+从尾到头打印链表1 题目1-替换空格2 思路及解答3 题目2-从尾到头打印链表4 思路及解答21 题目1-替换空格请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。2 思路及解答思路1:根据空格进行split 然后一个for循环实现字符串拼接,注意最后一个单独拿出来...原创 2019-07-03 19:53:29 · 195 阅读 · 0 评论 -
数据结构与算法 | 链表-2:单链表的实现
如何实现单链表?1 前言2 单链表可以进行哪些操作?3 如何实现上面这些操作?3.1 定义节点3.2 判断链表是否为空3.3 求链表长度3.4 遍历整个链表3.5 链表头部添加元素3.6 链表尾部添加元素3.7 指定位置添加元素3.8 删除节点3.9 查找节点是否存在4 完整封装成类参考1 前言目前大家已经了解了链表的相关概念,但仅停留在理论层面是远远不够的,下面我们就实际的用Python来实...原创 2019-06-28 11:35:30 · 546 阅读 · 0 评论 -
数据结构与算法 | 0-引入
数据结构和算法引入1 题目引入1.1 暴力搜索1.2 方法22 Python算法本身复杂度2.1 list的操作测试2.2 pop操作测试3 列表和字典内置操作的时间复杂度3.1 列表3.2 字典参考1 题目引入题目:如果 a+b+c=1000,且 a2+b2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?1.1 暴力搜索即枚举法!import timet0 = ...原创 2019-06-20 22:15:09 · 386 阅读 · 0 评论 -
数据结构与算法 | 7-顺序表
什么是顺序表?1 前言2 什么是顺序表2.1 顺序表的基本形式2.1.1 基本知识补充2.1.2 元素内/外置顺序表2.2 顺序表的结构和实现方式2.2.1 结构2.2.2 实现方式参考1 前言在之前的一期博客中提到过线性表,具体见:数据结构与算法 | 6-线性表 ,里面提到线性表的概念为:那本期要提到的顺序表和线性表有什么关系呢?实际上,根据线性表的实际存储方式,分为两种实现模型:...原创 2019-06-21 15:11:37 · 386 阅读 · 0 评论 -
数据结构与算法 | 1 导论
导论1 前言2 导论部分2.1 什么是数据结构?2.2 数据结构的种类2.3 4大逻辑结构2.4 数据元素的存储结构参考1 前言为了准备秋招,开始准备数据结构与算法,但是作为非科班的我,直接刷LeetCode或者看一些书籍实在是看不下去,这时候就想着看视频课程,想起来之前很早就买过小甲鱼的官网的VIP,于是就搜了小甲鱼主讲的数据结构和算法的课程,希望能配合他的视频课程将这个课过一遍!加油!2...原创 2019-06-17 16:23:16 · 269 阅读 · 0 评论 -
数据结构与算法 | 2 算法
涉及到算法的一些概念1 相关概念1.1 什么是算法1.2 算法的基本特征1.3 算法设计的要求参考1 相关概念1.1 什么是算法算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。1.2 算法的基本特征算法具有五个基本特征:输入注:可以没有输入,仅有输出举例:输出注:至少有1个输出,即必须要有输出!有穷性注...原创 2019-06-17 16:55:39 · 236 阅读 · 0 评论 -
数据结构与算法 | 3-5 时间复杂度和空间复杂度
什么是时间复杂度和空间复杂度?1 前言2 时间复杂度2.1 含义2.2 如何求解2.3 具体有哪几种形式?2.4 如何确定一段代码对应上面哪种形式?2.4.1 常数阶O(1)2.4.2 线性阶O(n)2.4.3 对数阶O(logN)2.4.4 线性对数阶O(nlogN)2.4.5 平方阶O(n²)2.4.6 立方阶O(n³)2.4.7 K次方阶O(n^k)2.4.8 指数阶(2^n)3 空间复杂度...原创 2019-06-11 12:22:51 · 1261 阅读 · 0 评论 -
数据结构与算法 | 希尔排序
啥叫希尔排序?1 什么叫希尔排序?2 代码实现3 时间复杂度4 稳定性参考1 什么叫希尔排序?希尔排序(Shell Sort)是插入排序的一种。该方法因DL.Shell于1959年提出而得名。希尔排序的基本思想是:对列表数据选定一个初始gap,然后依次挑出数来,分为了几组,然后对每一组的数据进行插入排序,再将将数据归并起来,减少gap,重复上述过程,直至gap=1,此时做最后一次循环然后停...原创 2019-07-07 19:26:44 · 419 阅读 · 0 评论 -
数据结构与算法 | 快速排序
快速排序代码实现补充待补充!代码实现思路:定义一个初始值mid_value 和两个游标 low high控制两个游标的移动,要实现的效果是什么呢?就是最后让mid_value左边的值都比它小,右边的值都比它大!这样分成两部分之后再递归调用这个函数就ok了!能实现最终的排序!那我们要怎么操作呢?【两边夹逼!】def quick_sort(alist, first, last): ...原创 2019-07-08 12:29:04 · 409 阅读 · 0 评论 -
数据结构与算法 | 链表-3:单向循环链表的实现
如何实现单向循环链表?1 定义2 Python手写单向循环链表2.1 先定义节点2.2 增删改查2.3 实例参考1 定义在之前的博客:数据结构与算法 | 链表-2:单链表的实现中笔者提到了单向链表的相关实现,本期博客将注重单向循环链表的实现!单向循环链表其实就是在单向链表的基础之上做了一点改进,就是尾节点的next区域并不是指向None了,而是指向头结点!2 Python手写单向循环链表...原创 2019-07-02 20:40:34 · 426 阅读 · 0 评论 -
数据结构与算法 | 链表-4:双向链表的实现
双向链表的实现?1 前言2 Python实现2.1 先定义节点2.2 定义双链表2.3 实例参考1 前言关于链表的系列,目前已经整理完成了:数据结构与算法 | 链表-1数据结构与算法 | 链表-2:单链表的实现数据结构与算法 | 链表-3:单向循环链表的实现现在还剩下双向链表的问题,双向链表的结构如下:那如何实现它呢?2 Python实现2.1 先定义节点class No...原创 2019-07-02 20:47:09 · 774 阅读 · 0 评论 -
数据结构与算法 | 栈和队列
什么是栈和队列?1 什么是栈1.1 定义1.2 操作1.3 Python实现1.4 实例2 什么是队列2.1 定义2.2 变形拓展2.3 普通队列Python实现2.3.1 操作2.3.2 Python实现2.3.3 实例2.4 双端队列Python实现2.4.1 操作2.4.2 Python实现2.4.3 实例参考1 什么是栈1.1 定义栈(stack),有些地方称为堆栈,是一种容器,可...原创 2019-07-03 09:09:51 · 486 阅读 · 0 评论 -
剑指offer | 4 二维数组中的查找
剑指offer刷题1 前言2 题目3 思路及解答1 前言为了准备算法面试,开始刷题,剑指offer走起。计划10天内刷完!加油!(头条秋招提前批面试之前)2 题目在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。3 思路及解答思路1:暴力搜...原创 2019-07-03 11:14:07 · 223 阅读 · 0 评论 -
数据结构与算法 | 链表-1
什么是链表?1 前言2 什么是链表?3 链表的分类4 顺序表和链表之间的联系和区别参考1 前言前面的博客中,笔者提到了顺序表,现在又出来个链表?两者是什么关系呢?其实他们均属于线性表!有了宏观的概念之后,我们详细来聊聊链表具体的情况!2 什么是链表?定义:链表(Linked list)是一种常见的基础数据结构,是一种线性表但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储...原创 2019-06-28 09:19:08 · 411 阅读 · 0 评论 -
数据结构与算法 | 6-线性表
什么是线性表?1 线性表相关概念1.1 通俗定义1.2 数学定义1.3 线性表举例2 抽象数据类型2.1 什么叫数据类型?2.2 补充:C语言数据类型2.3 什么是抽象?什么是抽象数据类型?1 线性表相关概念1.1 通俗定义线性表(List):由零个或多个数据元素组成的有限序列首先它是一个序列,也就是说元素之间是有个先来后到的关系(顺序)唯一。若元素存在多个,则第一个元素无前驱,而最后...原创 2019-06-18 20:21:53 · 492 阅读 · 0 评论