
数据结构
鱼之天空
这个作者很懒,什么都没留下…
展开
-
300分钟搞定数据结构与算法课程学习5 ——动态规划
动态规划可以说是很多准备算法面试者的梦魇,大家都非常怕面试官会出动态规划的题目,如果遇到一些做过的题目还好,但要是遇到了根本就没有做过的,就无从下手了。本节课从动态规划的基本属性,题目分类,解题思想,以及算法复杂度等方面来详解动态规划。判断动态规划Wikipedia 定义:它既是一种数学优化的方法,同时也是编程的方法。1. 是数学优化的方法——最优子结构动态规划是数学优化的方法指,动态规划要解决的都是问题的最优解。而一个问题的最优解是由它的各个子问题的最优解决定的。由此引出动态规..原创 2020-05-19 17:54:28 · 423 阅读 · 0 评论 -
周记-深度优先
在看过深度搜索和广度搜索之后,就想着从Leetcode上找一些题刷一下,本来以为可以日刷五十道题,最后成了每天刷五道,这里进行周总结。我的代码好多都是看别人的,先理论学习1 124.二叉树的最大路径和传送门:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum///这个题的意思是返回一个最大路径的和,不是返回子树的和。 -10 / \ 9 20 / \ 15 7用这个图...原创 2020-05-17 10:28:33 · 283 阅读 · 1 评论 -
300分钟搞定数据结构与算法课程学习5 ——DFS和BFS
DFS 和 BFS 经常在算法面试题当中出现,在整个算法面试知识点中所占的比重非常大。应用最多的地方就是对图进行遍历,树也是图的一种。深度优先搜索(Depth-First Search / DFS)深度优先搜索,从起点出发,从规定的方向中选择其中一个不断地向前走,直到无法继续为止,然后尝试另外一种方向,直到最后走到终点。就像走迷宫一样,尽量往深处走。DFS 解决的是连通性的问题,即,给定两个点,一个是起始点,一个是终点,判断是不是有一条路径能从起点连接到终点。起点和终点,也可以指的是某种起始状态和.原创 2020-05-11 22:05:05 · 642 阅读 · 0 评论 -
300分钟搞定数据结构与算法课程学习5 ——递归与回溯
递归和回溯的关系密不可分:递归的基本性质就是函数调用,在处理问题的时候,递归往往是把一个大规模的问题不断地变小然后进行推导的过程。回溯则是利用递归的性质,从问题的起始点出发,不断地进行尝试,回头一步甚至多步再做选择,直到最终抵达终点的过程。递归(Recursion)算法思想递归算法是一种调用自身函数的算法(二叉树的许多性质在定义上就满足递归)。举例:(汉诺塔问题)有三个塔...原创 2020-05-03 17:34:23 · 552 阅读 · 0 评论 -
300分钟搞定数据结构与算法课程学习4 ——排序
算法学习其实是一种提高思维能力的过程。无论是学习算法,还是在面试或实际的工作、生活中,我们都会碰见一些从没遇到过的问题。解决方法也类似,先推敲最直观的解法,再对某个步骤进行优化。例如,讲前缀树的例题时,我们正是为了要提高匹配字符串的速度才借用了前缀树的。从这节课开始,我们会将宝贵的时间、精力针对性地去学习面试中最常考的、最核心的算法。而这节课要学习的是排序算法,包括:1. 基本的排序算法...原创 2020-05-03 16:31:22 · 444 阅读 · 2 评论 -
300分钟搞定数据结构与算法课程学习3 ——优先队列,图,前缀树,线段树,树状数组
优先队列(Priority Queue)特点能保证每次取出的元素都是队列中优先级别最高的。优先级别可以是自定义的,例如,数据的数值越大,优先级越高;或者数据的数值越小,优先级越高。优先级别甚至可以通过各种复杂的计算得到。应用场景从一堆杂乱无章的数据当中按照一定的顺序(或者优先级)逐步地筛选出部分乃至全部的数据。举例:任意一个数组,找出前k大的数。解法 1:先对这个数组...原创 2020-05-03 15:10:06 · 301 阅读 · 0 评论 -
python简单总结-字典,集合
python中字典是一种可变的容器,可以存储任意的数据对象,有时候字典也叫哈希表,是基于键值映射的数据结构。形式为:[key:value,key2:value2]。>>> b = {1:'qwe',2:'wsx'}>>> b{1: 'qwe', 2: 'wsx'}字典存储没有顺序>>> b.get('qwe')>...原创 2020-04-30 21:07:22 · 180 阅读 · 0 评论 -
300分钟搞定数据结构与算法课程学习2 ——树
树(Tree)树的结构十分直观,而树的很多概念定义都有一个相同的特点:递归,也就是说,一棵树要满足某种性质,往往要求每个节点都必须满足。例如,在定义一棵二叉搜索树时,每个节点也都必须是一棵二叉搜索树。正因为树有这样的性质,大部分关于树的面试题都与递归有关,换句话说,面试官希望通过一道关于树的问题来考察你对于递归算法掌握的熟练程度。树的形状在面试中常考的树的形状有:普通二叉树、平衡二...原创 2020-04-30 17:40:24 · 490 阅读 · 0 评论 -
300分钟搞定数据结构与算法课程学习2 ——队列
队列(Queue)特点:和栈不同,队列的最大特点是先进先出(FIFO),就好像按顺序排队一样。对于队列的数据来说,我们只允许在队尾查看和添加数据,在队头查看和删除数据。实现:可以借助双链表来实现队列。双链表的头指针允许在队头查看和删除数据,而双链表的尾指针允许我们在队尾查看和添加数据。应用场景:直观来看,当我们需要按照一定的顺序来处理数据,而该数据的数据量在不断地变化的时候,则需要...原创 2020-04-30 17:31:46 · 187 阅读 · 0 评论 -
300分钟搞定数据结构与算法课程学习2 ——栈
栈(Stack)特点:栈的最大特点就是后进先出(LIFO)。对于栈中的数据来说,所有操作都是在栈的顶部完成的,只可以查看栈顶部的元素,只能够向栈的顶部压⼊数据,也只能从栈的顶部弹出数据。实现:利用一个单链表来实现栈的数据结构。而且,因为我们都只针对栈顶元素进行操作,所以借用单链表的头就能让所有栈的操作在 O(1) 的时间内完成。应用场景:在解决某个问题的时候,只要求关心最近一次的操...原创 2020-04-30 17:17:06 · 333 阅读 · 0 评论 -
300分钟搞定数据结构与算法课程学习 2——列表
链表(LinkedList)单链表:链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素中的引用字段链接在一起。双链表:与单链表不同的是,双链表的每个结点中都含有两个引用字段。链表的优缺点链表的优点如下:链表能灵活地分配内存空间;能在 O(1) 时间内删除或者添加元素,前提是该元素的前一个元素已知,当然也取决于是单链表还是双链表,在双链表中,如果已知该元素的后一个...原创 2020-04-30 17:08:34 · 463 阅读 · 0 评论 -
300分钟搞定数据结构与算法课程学习2 ——数组
数据结构,字符串1 字符串转换在分析字符串相关面试题的过程中,我们往往要针对字符串当中的每一个字符进行分析和处理,甚至有时候我们得先把给定的字符串转换成字符数组之后再进行分析和处理。由于无法直接修改字符串里的字符,所以必须先把字符串变换为数组,然后再运用这个算法。#include <iostream>#include <string>using nam...原创 2020-04-30 16:53:02 · 461 阅读 · 0 评论 -
300分钟搞定数据结构与算法课程学习1
原创 2020-04-30 09:23:27 · 866 阅读 · 1 评论 -
单链线性表二
//目标://1.实现建立线性表//2.实现单向线性表的增删改擦#include <iostream>#include<time.h>using namespace std;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 ...转载 2018-06-29 11:02:56 · 293 阅读 · 0 评论 -
单链线性表一
#include<iostream>#include<stdlib.h>using namespace std;typedef struct LNode{ int data; struct LNode *next;//next为指针域,存放其后继结点的地址。}LNode,*LinkList;//采用头插法建立单链表LinkList Creat...转载 2018-06-29 11:00:42 · 396 阅读 · 0 评论