数据结构与算法
数据结构与算法相关
雨下一整夜ん
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二叉树的暴力递归解决树形问题
二叉树的递归套路简介递归套路思想注意事项相关题目小结简介二叉树的暴力递归方法其实就是对树形动态规划的一个暴力解决方法。为什么说他暴力呢?主要是他的解题思路是通过不断的递归调用,分别把左树和右树收集到的信息进行整合,然后进行加工在返回给调用方。对于许多笔试,甚至面试碰到树形DP问题都能很好的解决,虽然复杂度(时间和空间)可能相对较高,后期可以自己换另外的方法来解决(例如使用迭代,或者自己压栈来代替递归操作)。递归套路思想首先我们先来看代码,这段代码主要是返回该树的叶子节点的个数。public int原创 2020-11-04 20:17:23 · 408 阅读 · 0 评论 -
二叉树的遍历的递归与非递归实现
二叉树的遍历问题1.递归序2.递归方法遍历二叉树3.非递归方法遍历前序遍历后序遍历:中序遍历:小结:1.递归序抛开二叉树的遍历。我们来单看一个普通的递归函数:public static void DiGui(Tree node){ if(node == null){ return; } /* 节点第一次到达DiGui函数体 */ System.out.println("first time:" + node.val原创 2020-10-27 17:38:09 · 1539 阅读 · 0 评论 -
处理数组数据相关问题
处理数组数据相关问题双重指针的使用对应题目自身解决双重指针解决对于处理数组中的数据,不同的需求有对应的不同的处理方法。这里将慢慢记录碰到的(leetcode)一些处理方法。双重指针的使用对应题目27 原地移除指定元素,元素顺序可变26 移除有序数组中重复的元素自身解决对于第一第二题,我在解决的时候也可以说算是使用了暴力法。第一题直接判断如果当前num[i]等于给定的数值,那么将其置为Integer.MAX_VALUE;而第二题则使用了TreeMap对数据已经保存,如果num[i]对应的数据原创 2020-10-25 17:17:59 · 238 阅读 · 0 评论 -
LeetCode.232 用栈实现队列
解题思路这道题使用两个栈来完成即可,一个入栈,一个出栈。出队列(返回队列头)流程图:入队入队直接在入栈中插入元素即可,无需过多条件。判断队列是否空这个需要注意,要判断两个栈都为空时,才能为空代码实现public class leetcode232 { // 入栈 private Stack inStack = new Stack(); // 出栈 private Stack outStack = new Stack(); /** Initiali原创 2020-08-20 19:56:29 · 224 阅读 · 0 评论 -
LeetCode141.判断链表是否有环(面试常考)
LeetCode141.判断链表是否有环题目要求解题思路代码实现题目要求给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/linked-list-cycle著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路其实很以前学过的追击问题很原创 2020-08-18 18:34:16 · 248 阅读 · 0 评论 -
LeetCode206.链表反转两种实现
LeetCode206链表反转题目描述递归实现步骤解析代码实现迭代实现步骤代码实现小结题目描述反转一个单链表。输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL递归实现其实拿到这个题目首先应该想到的是递归拆分。步骤解析1、既然是反转链表,那我们先从最简单的两个节点开始2、拿到这个最简单的链表,我们不难看出。因为2的下一个节点是空,所以反转后,2就是头结点。所以,我们可以先肆无忌惮的将2原创 2020-08-18 14:09:05 · 367 阅读 · 1 评论 -
LeetCode237.删除链表节点详解
LeetCode237删除链表节点题目描述传统思维改进思路代码实现题目描述传统思维很多小伙伴拿到题目都会下意识的反应直接将要删除的节点的上一个节点直接指向要删除节点的下一个节点,也就是如下图所示但是,通过题目条件我们根本无法获取到要删除节点的上一个节点。我甚至还想从头遍历用一个变量记录次数,发现头结点也获取不到。改进思路我们不妨换一个角度去想,虽然我们获取不到上一个节点,但是我们可以获取下一个节点和下下个节点还有下下下个节点…既然这样,我们是不是可以用下一个节点覆盖本节点,然后在删除下一个原创 2020-08-18 10:21:35 · 160 阅读 · 0 评论 -
ArrayList简单自实现与源码浅析
动态数组了解一下什么是数据结构从数组出发,了解数据结构接口定义需求简单方法的实现特殊方法的处理1、clear方法。2、add方法。3、delete方法。4、重写toString方法。5、动态扩容。动态数组灵活升级使用泛型,灵活性更高完善clear,避免浪费内存同理,remote方法也要解决浪费内存修改equal,避免对象值比较出错处理NULL值ArrayList源码简单解析:成员变量静态常量构造方法元素清空查找某个值元素添加元素扩容(核心)了解一下什么是数据结构数据机构是计算机存储、组织数据的方式。正如原创 2020-08-17 18:30:56 · 227 阅读 · 0 评论 -
LeetCode509斐波那契数及时间复杂度学习
从斐波那契数列了解时间复杂度引入斐波那契算法所带来的的问题:修改后的代码优化剖析算法的评估时间复杂度1、忽略常数2、忽略系数3、忽略低阶4、对于对数5、常见复杂度空间复杂度复杂度的优化衡量指标:斐波那契算法时间复杂度分析使用递归:优化后引入斐波那契算法说到菲波那切数列(给定一个数组,某一项的数都等于前一项的数与前前一项的数的和),我们首先想到的解法就是使用递归函数进行一个调用,当执行到首项和第二项时,我们就对其值进行返回。凡是要获取大于等于第二项的,我们通通还要进行递归直到执行至第一第二项的时候。下面我原创 2020-08-16 17:39:35 · 525 阅读 · 0 评论 -
数据结构与算法学习之稀疏数组
稀疏数组1、定义2、压缩办法3、压缩代码实现4、持久化效果5、稀疏数组还原最近一段时间一直在弄个小项目,但是学习过程中发现数据结构与算法这块简直是残废,于是变写项目边补一补,慢慢记录记录。1、定义稀疏数组是对特定二维数组的一个压缩;这个二维数组是一个包含较少特定有效数值的二维数组,如下图:从图中我们可以看到,这个二维数组的有效数值只有两个;但是我们对这个二维数组进行持久化时,也会将这些0...原创 2020-04-26 13:33:23 · 404 阅读 · 0 评论
分享