![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 87
两菜一汤、
这个作者很懒,什么都没留下…
展开
-
树与堆学习
树与堆之前提到树和堆的一个定义,树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。堆就是用数组实现的二叉树.那么树是究竟有几种实现方式呢? 目前来说,是两种链式存储基于链表的树,相信大家都能比较直观的理解.以二叉树为例,从上图可以看到,树的每个节点是由数据域和指针域构成,一个指针指向父节点,其他的指针指向子节点,根节点没有父节点指针,叶子节点没有子节点指针.二叉树主要有两种遍历方式:深度优先遍历:先往深走,遇到叶子节点再往回走。广度优先遍历:一层一层的原创 2021-09-19 14:06:32 · 128 阅读 · 0 评论 -
动态规划-背包问题
动态规划-01背包动态规划中最为经典的题目必然就是背包问题, 而背包问题的基础就是01背包.引用一个大佬梳理的背包图解由上图可以看到,01背包其实就是背包选物品,一种物品只有一个,要么选,要么不选.先通过一个简单的01背包问题来理解01背包问题.01背包有N件物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。| 物品名称 | 价值 | 重量 || -----原创 2021-09-09 21:16:43 · 108 阅读 · 0 评论 -
动态规划-二维dp数组和滚动数组
二维数组如上图,一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?看到这道题,查找从A点到B点的路径,如果对图论比较熟悉的话,可能第一印象是用图论的深度优先搜索来实现.func dfs(i int, j int, m int, n int) int { if i > m || j > n { return 0原创 2021-08-31 16:22:41 · 2407 阅读 · 0 评论 -
基础数据结构
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等.数组arr := [5]int{1,2,3,4,5}数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。优点:连续存储.查询单个元素速度快,数组遍历速度快缺点:数组一旦创建,数组的大小就固定了.数组只能存储一种类型的数据数组添加,删除的操作需要移动后面的元素,所以原创 2021-08-28 15:45:27 · 183 阅读 · 0 评论 -
动态规划基础
基本思想:问题的最优解如果可以由子问题的最优解推导得到,则可以先求解子问题的最优解,在构造原问题的最优解;若子问题有较多的重复出现,则可以自底向上从最终子问题向原问题逐步求解。动态规划中每一个状态一定是由上一个状态推导出来的,将问题拆分成子问题,求最优解. 这一点就区分于贪心,区别于贪心算法的是贪心没有状态推导,而是从局部直接选最优的.对于动态规划问题,拆解为如下五步曲;- 确定dp数组(dp table)以及下标的含义- 确定递推公式- dp数组如何初始化-&nb原创 2021-08-28 15:39:46 · 116 阅读 · 0 评论