数据结构与算法学习
热干面的日常学习
我觉得靓仔这个词听着很舒服,虽然我不是广东的
展开
-
剑指 Offer 13. 机器人的运动范围——广度优先搜索、递推
一、题目地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?二、题解1——递归实现向四个方向搜索class Solution { publ原创 2020-11-09 21:48:50 · 103 阅读 · 0 评论 -
图——Bellman-Ford算法的队列优化
对于其原理还不是太懂。package graph.OptimumBellmanFord;import java.util.Scanner;public class OptimumBellmanFord { public static int Max_Value = 100000; public static void main(String[] args) { Scanner scanner = new Scanner(System.in);原创 2020-11-06 19:06:18 · 97 阅读 · 0 评论 -
图——Bellman-Ford算法——求解单源最短路径
本算法的主要实现了给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶点之间的最短距离,其显著特点是可以求取含负权图的单源最短路径。Bellman-Ford算法的主要思想是:初始化最短路径的结果表shortest[]循环n-1次,遍历所有边进行松弛计算(判断shortest[v]>shortest[u]+w(u,v)判断是否有负权值回路(以求得结果后,上述判断条件依然成立,则说明有负权值回路)package graph.Bellman_FordAlgorithm;i.原创 2020-11-06 14:21:26 · 299 阅读 · 0 评论 -
图——Folyd算法——多源最短路径,可以解决负权值问题
该算法的主要思想是:利用动态绘规划的思想寻找给定的加权图中多源点之间的最短路径。每一次找到更小的路径都会更新在方阵中。package graph.FloydAlgorithm;public class Floyd { public static void main(String[] args) { int[][] matrix = { {0,-1,3,-1}, {2,0,-1,-1},原创 2020-11-06 10:48:42 · 1935 阅读 · 0 评论 -
图——Dijstra算法——求解最短路径
本算法的主要思想是:每一次找出源节点到各节点的路径长,取出其中最短的一个,此时到达该节点没有其他最短路径了,然后做上标记,防止下一次访问。找到该路径以后,再更新通过当前节点跳往其他节点的路径,但不标记。直到找到所有最短路径长。package graph.DijstraAlgorithm;import java.util.Scanner;public class DijstraAlgorithm { public static int Max_Value = 100000;//不能设原创 2020-11-06 09:50:29 · 134 阅读 · 0 评论 -
将二叉树的叶子节点串成链表
利用节点的右指针将一颗二叉树的叶子节点从左往右传承一个单链表。void link(BTNode* p,BTNode* head,BETNode* tail){ if(p) { if(!p->left&&!p->right) { if(head==NULL) { head=p; tail=p; ...原创 2020-04-16 11:11:24 · 661 阅读 · 0 评论 -
二叉树所有节点数、叶子节点数的计算
一、假设二叉树采用二叉链存储结构,设计一个算法,计算一颗给定二叉树的所有节点数。解法一int n;void count(BTNode* p){ if(p) { ++n; count(p->left); count(p->right); }}解法二int count(BTNode* p){...原创 2020-04-16 10:46:36 · 7908 阅读 · 0 评论 -
串的基本操作及KMP算法
一、基本概念串的定义:串是由零个或者多个字符组成的有限序列,串中字符的个数称为串的长度,含有零个元素的串叫做空串。子串:串中任意连续的字符组成的子序列。主串:包含子串的串。子串的第一个字符的位置作为子串在主串的位置。空格串:由一个或者多个空格组成的串。串是限定了元素为字符的线性表。二、串的结构定长顺序存储表示结构定义typedef struct{ char str[msxSi...原创 2020-04-04 23:56:48 · 575 阅读 · 0 评论 -
二叉树的三种遍历方式(先序、中序、后序)(PerOrder、InOrder、PostOrder)
一、二叉树的遍历二叉树的遍历方式分为三种:先序遍历、中序遍历、后序遍历。先序遍历:根–左--右中序遍历:左–根--右后序遍历:左–右--根二、先序遍历...原创 2020-03-21 10:42:30 · 3578 阅读 · 0 评论 -
二叉树
一、树是什么树是由n(n>0)个有限节点组成的一个层次关系的集合。树的特点:①每一个节点都有0个或多个子节点。②没有父节点的节点为根节点。③每一个非根节点都有一个父节点。④除了根节点外,每个子节点可以分为多个不相交的子树。图示二叉树:每个节点至多只有两个子树。满二叉树:除了最后一层节点没有子节点以外,每一层的所有节点均有两个子节点。完全二叉树:由满二叉树引出来的,区别在...原创 2020-03-20 09:16:53 · 155 阅读 · 0 评论 -
栈(Stack)
一、简介栈是一种线性存储结构,遵循先进后出的原则,只能在栈顶进行插入和删除。栈顶和栈底,元素的插入和删除发生在栈顶。入栈:向栈中插入元素。(只能插在栈顶)出栈:删除元素。(只能删除栈顶的元素)二、基于数组的栈的实现(图片来源于网络)template<typename T>class ArrayStack{ T* array;//数组 int count;//元...原创 2020-03-19 16:22:53 · 179 阅读 · 0 评论 -
队列(Queue)
一、简介队列是一种先进先出的数据结构,允许插入的一端是队尾(tail或rear),允许删除的一端时对头(head或front)。二、队列(图片来源:队列)图示入队出队队列的操作:1)入队:push(x),将x插入队尾2)出队:pop(),将队首元素删除3)返回第一个元素:front()4)返回最后一个元素:back()5)判空:empty()6)获取长度:size()...原创 2020-03-19 11:47:42 · 352 阅读 · 0 评论 -
链表(LinkList)----双向链表
一、链表的基本概念链表是一种物理上不连续、非顺序的存储结构,数据元素之间通过指针关联在一起。链表有一系列的节点构成,每个节点至少包含两部分信息:元素数据、指向下一个节点的指针。链表的特点:1)空间开销大(物理空间不连续)2)可以动态添加新的节点3)查找元素只能按顺序查找双向链表在单链表的基础上增加了一个指向上一个元素的指针。本篇幅不再分块介绍双向链表。单链表位置:单链表...原创 2020-03-19 09:15:32 · 441 阅读 · 0 评论 -
链表(LinkList)---单链表
一、链表的基本概念链表是一种物理上不连续、非顺序的存储结构,数据元素之间通过指针关联在一起。链表有一系列的节点构成,每个节点至少包含两部分信息:元素数据、指向下一个节点的指针。链表的特点:1)空间开销大(物理空间不连续)2)可以动态添加新的节点3)查找元素只能按顺序查找二、单向链表图示节点代码class Node{//节点 public: in...原创 2020-03-18 11:30:39 · 683 阅读 · 0 评论 -
广度优先搜索(BFS)
一、BFS的思想原创 2020-03-18 09:14:34 · 119 阅读 · 0 评论 -
深度优先搜索(DFS)
代码题目:找出1-10有多少种排序方式#include <iostream>using namespace std;int a[10];itn book[10]={0};//标记数是否被使用,0为否,1为是void DFS(int step)//到达第n+1的位置时,说明摆放完成{ if(step==n+1) { for(int i=1;i<=n;i++)...原创 2020-03-16 20:47:47 · 265 阅读 · 1 评论 -
十大排序算法之总结与回顾
注:所有图片均来自于网络一、冒泡排序(BubbleSort)原理:比较相邻两元素之间的大小,若右边的小于左边的,则交换两元素的顺序,循环执行此过程,直到排序完成。性质:稳定,时间复杂度:O(n2),空间复杂度:O(1)。二、桶排序(BucketSort)原理:以元素的值为坐标存入相应的桶中,元素出现一次,则对应的桶的值就+1,最后按顺序取出所有元素。性质:稳定;空间复杂度:O(...原创 2020-03-13 16:56:58 · 179 阅读 · 0 评论 -
十大排序算法之基数排序(RadixSort)
一、前言数据结构与算法,顺便刷leetcode,无意间发现了一个 我觉得讲解的比较好的网页,并且会拿leetcode里面的题目当做例题,如有需要,奉上网址:五分钟学算法二、算法的思想基数排序是一种非比较型排序算法,其原理是,将整数按位数切割成不同的数字,然后逐位比较。三、算法的步骤按照个位数进行排序:根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中。将这些桶子中的数值重新...原创 2020-03-13 15:30:15 · 295 阅读 · 0 评论 -
十大排序算法之堆排序(HeapSort)
一、前言数据结构与算法,顺便刷leetcode,无意间发现了一个 我觉得讲解的比较好的网页,并且会拿leetcode里面的题目当做例题,如有需要,奉上网址:五分钟学算法二、预备知识堆是...原创 2020-03-13 11:31:29 · 152 阅读 · 0 评论 -
十大排序算法之计数排序(CountingSort)
一、前言数据结构与算法,顺便刷leetcode,无意间发现了一个 我觉得讲解的比较好的网页,并且会拿leetcode里面的题目当做例题,如有需要,奉上网址:五分钟学算法二、算法思想...原创 2020-03-12 18:43:15 · 484 阅读 · 0 评论 -
十大排序算法之归并排序(MergeSort)
一、前言数据结构与算法,顺便刷leetcode,无意间发现了一个 我觉得讲解的比较好的网页,并且会拿leetcode里面的题目当做例题,如有需要,奉上网址:五分钟学算法二、算法的介绍分组,将序列的中的元素进行逐层折半分组,直到每组只有一个元素。归并,逐层向上排列每一层的元素的顺序,然后合并成更大的组,直到所有元素合并成一个有序的序列。合并序列时,要申请一个新的空间,用于将两个小序列合并...原创 2020-03-12 17:08:20 · 1053 阅读 · 0 评论 -
十大排序算法之希尔排序(ShellSort)
一、前言数据结构与算法,顺便刷leetcode,无意间发现了一个 我觉得讲解的比较好的网页,并且会拿leetcode里面的题目当做例题,如有需要,奉上网址:五分钟学算法二、算法的来源希尔算法是简单插入排序的改进版,实现简单,在中规模数据上表现的还不错,也称缩小增量排序。三、...原创 2020-03-12 12:24:27 · 201 阅读 · 0 评论 -
十大排序算法之插入排序(InsertSort)
一、前言数据结构与算法,顺便刷leetcode,无意间发现了一个 我觉得讲解的比较好的网页,并且会拿leetcode里面的题目当做例题,如有需要,奉上网址:五分钟学算法二、算法思想假设序列的第一个数是有序的,然后将第二个数插入进来,如果比第一个数小,则插入到第一个数前面。类似重复上述步骤,将新插入进来的数都放在正确的位置,直到序列全部有序。三、算法的图解(图片来源于网络)四、...原创 2020-03-12 11:15:57 · 226 阅读 · 0 评论 -
十大排序算法之选择排序(SelectSort)
一、前言数据结构与算法,顺便刷leetcode,无意间发现了一个 我觉得讲解的比较好的网页,并且会那leetcode里面的题目当做例题,如有需要,奉上网址:添加链接描述二、算法的步骤在无序序列中找到最小(大)的那个元素,存放到起始位置在剩余的序列元素中找到下一个最小(大)元素,存放在第二个位置重复上述过程,直至所有元素都排序完毕。三、图片演示四、代码#include &...原创 2020-03-11 23:27:54 · 266 阅读 · 0 评论 -
十大排序算法之冒泡排序(BubbleSort)
前言:数据结构与算法,顺便刷leetcode,无意间发现了一个我觉得讲解的比较好的网页,并且会那leetcode里面的题目当做例题,如有需要,奉上网址:五分钟学算法一、算法的步骤比较相邻的两个元素,如果第一个元素大于第二个元素,则交换两个元素的位置。对序列中每一对相邻的元素都进行上述操作,使得序列中最大的元素排到序列的最末端。重复上诉操作,使得第二大的数排在序列的倒数第二位。直到所有元...原创 2020-03-11 19:17:45 · 332 阅读 · 0 评论 -
动态规划(进阶)--矩阵类动态规划
前言:最近开始学习数据结构与算法,顺便刷leetcode,无意间发现了一个我觉得讲解的比较好的网页,并且会那leetcode里面的题目当做例题,如有需要,奉上网址:五分钟学算法一、概念1.回顾核心步骤:拆解问题–定义状态2.概念矩阵类动态规划,也可以叫做坐标类动态规划,一般这类问题都会给你一个矩阵,矩阵里面有着一些信息,然后你需要根据这些信息求解问题。你可以把整个矩阵当成一个图,矩阵里...原创 2020-03-08 22:48:18 · 871 阅读 · 0 评论 -
动态规划
前言:最近开始学习数据结构与算法,顺便刷leetcode,无意间发现了一个我觉得讲解的比较好的网页,并且会那leetcode里面的题目当做例题,如有需要,奉上网址:五分钟学算法一、...原创 2020-03-08 09:51:43 · 151 阅读 · 0 评论 -
贪心算法
贪心算法基本思想:大事化小,小事化了在对问题进行求解时,总是做出在当前看来最好的选择,获得局部最优解。基本思路(1)建立数学模型(2)将问题分解成若干个子问题(3)对每个子问题进行求解,得到子问题的局部最优解(4)把子问题的局部最优解合成原来问题的一个解适用范围:贪心策略适用的前提是:局部最优策略能导致产生全局最优解。 比如霍夫曼编码(Huffman Coding)、P...原创 2020-03-06 21:59:19 · 182 阅读 · 0 评论