![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 69
屁颠屁颠过日子
这个作者很懒,什么都没留下…
展开
-
数据结构 - 背包问题
用到的dp[ j - w[i]]是第i次循环计算出来的值, 相当于在执行:dp[ i ][ j ] = max{ dp[i - 1][ j ], dp[ i ][ j - w[i] ] };(注意是dp[ i ][ j - w[i]] )因为 dp[j-w] 表示 dp[i-1][j-w],因此不能先求 dp[i][j-w],防止将 dp[i-1][j-w] 覆盖。必须保证,在计算dp[ j ]的时候,dp[ j - w[i]]依然等于dp[i -1][ j - w[i] ]。原创 2024-04-03 20:27:53 · 2265 阅读 · 0 评论 -
数据结构 -- 二叉树
完全二叉树若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。它的深度至少是lg(N+1)。最多也不会超过lg(2N)。a) 判断一棵树是否是完全二叉树:按层遍历如果一个结点,左右孩子都不为空,则pop该节点,将其左右孩子入队列;如果一个结点,左为空,右不为空,则该树一定不是完全二叉树;如果...原创 2020-05-06 14:51:58 · 427 阅读 · 1 评论 -
数据结构 - 前中后序遍历
方法三:莫里斯遍历:在第二次到达时,然后逆序打印左子树的右边界,最后打印整棵树的右边界。如果cur有左孩子,找到cur左子树上最右的节点,记为mostRight。如果一个节点有左子树,可以到达两次,而且在第二次到达时,其左子树遍历完毕。如果cur无左孩子,cur向右移动, cur = cur.right。在介绍具体代码之前,先简述一下 莫里斯遍历 相关内容。若没有左子树,则只能到达一次。来到当前节点,记为cur。:不使用任何辅助空间。原创 2024-04-03 19:58:16 · 252 阅读 · 0 评论 -
数据结构 -- 数组累加和
解题思路:必须以某个位置结尾的情况下,答案一定在其中。1. 给定一个数组,有正有负,求累加和为target的最长子数组解析:计算前缀和数组,sum表示从开始到 i 位置的累加和。Map:key指累加和,value指最早出现的位置。public int maxLength(int[] arr, int k){ if(arr == null || arr.length == 0) return 0; Map<Integer, Integer> map = new HashMap&l原创 2020-06-01 13:55:04 · 3113 阅读 · 0 评论 -
数据结构 -- 十大排序算法
1. 冒泡排序①、算法描述:比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素做同样的工作,第一轮使尾部值最大,第二轮尾部两个值最大。针对所有的元素重复以上的步骤;②、代码实现: public static void bubbleSort(int[] list) { boolean needswap = true; for(int i = 1; i < list.length && needswap; i++){ needswap =原创 2020-06-01 13:44:42 · 120 阅读 · 0 评论 -
数据结构 -- 马拉车算法
查找一个字符串的最长回文子串的线性算法。时间复杂度为O(n)1. 原理在原字符串的每个相邻两个字符中间插入一个分隔符,同时在首尾也要添加一个分隔符,分隔符不能在原串中出现,一般情况下可以用#号,使字符串长度变成奇数个。(1)Len数组性质用一个辅助数组Len[i]表示以字符T[i]为中心的最长回文字串半径长度。注:Len[i]-1就是该回文子串在原字符串S中的长度,证明:以T[i]为中心的最长回文字串长度是2*Len[i]-1 ,其中分隔符的数量一定比其他字符的数量多1,即有Len[i]-1个字符原创 2020-05-27 15:32:18 · 160 阅读 · 0 评论 -
数据结构 -- KMP算法
用来解决字符串查找的问题,可以在一个字符串(S)中查找一个子串(W)出现的位置。KMP 算法把字符匹配的时间复杂度缩小到 O(m+n) ,而空间复杂度也只有O(m)1. 前缀、后缀"前缀"指除了最后一个字符以外,一个字符串的全部头部组合;"后缀"指除了第一个字符以外,一个字符串的全部尾部组合。模式串: ab aba abab前缀组合: a a、ab a、ab、aba后缀组原创 2020-05-27 14:55:19 · 158 阅读 · 0 评论 -
数据结构 -- 完全/平衡二叉树
1. 完全二叉树若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。它的深度至少是lg(N+1)。最多也不会超过lg(2N)。a) 判断一棵树是否是完全二叉树:按层遍历如果一个结点,左右孩子都不为空,则pop该节点,将其左右孩子入队列;如果一个结点,左为空,右不为空,则该树一定不是完全二叉树;如果一个结点,左孩子不为空,右孩子为空;或者左右孩子都为空;则该节点之后的队列中的结点都为叶子节点;该树才是完原创 2020-05-27 13:30:41 · 758 阅读 · 0 评论 -
数据结构 -- 6种股票交易
一、穷举框架利用「状态」进行穷举。我们具体到每一天,再找出每个「状态」对应的「选择」。股票问题每天有三种「选择」:买入、卖出、无操作,用 buy, sell, rest 表示这三种选择这个问题的「状态」有三个,第一个是天数,第二个是允许交易的最大次数,第三个是当前的持有状态(即之前说的 rest 的状态,假设 1 表示持有,0 表示没有持有)。dp[i][k][0 or 1]for 0 <= i < n: for 1 <= k <= K: for原创 2020-05-27 12:48:19 · 419 阅读 · 0 评论