数据结构与算法
文章平均质量分 76
懒杰
懒惰是一种美德。
展开
-
学习红黑树心得
红黑树0.前言最近看了b站一个红黑树的视频,觉得讲得很好,同时写下,看完后的心得。视频链接:https://www.bilibili.com/video/BV135411h7wJ?p=15红黑树演示网站:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html注意:以下每个步骤穿插的代码只是针对某个步骤,要么是自己写的,要么是参照b站视频的老师写的。如果要看完整代码看最后。每种情况我只讲左边或右边,因为针对左边的代码,复制一下改原创 2021-06-14 17:53:55 · 954 阅读 · 17 评论 -
编辑距离笔记
一、前言最近开始学动态规划,发现动态规划算法这样的题目,状态转换方程推不出,就真的做不出了,这个感觉就像是要靠天赋的,或者多刷题,但是即使多刷题,遇到没思路的,也一样推不出方程。然后昨天看到编辑距离这道题,看了一会儿看不出思路,然后看状态转换方程,也还是不懂,于是就尝试填表格推一下,才搞懂。二、题目leetcode0072:https://leetcode-cn.com/problems/edit-distance/给你两个单词 word1 和 word2,请你计算出将 word1 转换成原创 2021-03-16 15:35:15 · 96 阅读 · 0 评论 -
递归与非递归
一、前言最近在刷树、图相关的题,很多题都用到了递归做法,但是其实这些题也有非递归做法,而我也经常用非递归解法。这篇博客的目的就是写写我对递归和非递归的看法。(java中)二、递归对于递归,其实是一种隐式调用栈的过程,看如下代码:public class RecursionTest { public static void main(String[] args) { System.out.println(factorial(6)); } priv原创 2021-03-15 02:36:02 · 1330 阅读 · 0 评论 -
冒泡排序的改进
package com.jie.day05;import org.junit.Test;import java.util.Arrays;public class Demo03 { @Test public void testSort0() { int[] numbers = {1, 3, 2, 5, 4, 6, 10, 0, 9, 8, 7}; ...原创 2019-11-24 18:48:17 · 205 阅读 · 0 评论 -
idea算法28页运行程序
那些环境变量什么的配好了但是却要在控制台中运行实在是太麻烦了,而且不能debug,所以我就想在idea中运行的时候可不可以把两个文件读取进去。首先,idea结构图:然后本来是要输入命令:java Order_01_BinarySearch tinyW.txt < tinyT.txt我这里的Order_01_BinarySearch相当于书上的BinarySearch。接着:...原创 2020-02-21 21:25:41 · 144 阅读 · 0 评论 -
快慢指针的理解与例题
一、前言最近这段时间我在看链表,同时刷leetcode与链表相关的一些题目,遇到了判断环形链表的题目,我无从下手,然后上网查找一下关于链表的一些其他操作,找到了快慢指针这一关于链表的操作,可以用于判断一个链表是否是环形链表。二、快慢指针在链表中的一些证明以下内容我参考了一篇博客:https://blog.csdn.net/jnxxhzz/article/details/827731121、快慢指针相遇的证明① 没有环的情况当链表没有环的时候,快指针会到链表尾部,遇到null,慢指针则指向链原创 2020-12-09 01:14:05 · 368 阅读 · 0 评论 -
复制带随机指针的链表
一、前言前段时间在leetcode刷到一道复制带随机指针的链表的题目(网址在这),我用的是很傻的方法过的,看了评论区后发现有个很好的方法,我用他的思路自己实现了一下。因为感觉很妙,所以记录一下他这种方法。二、题目详情原题网址链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer以下是复制的题目:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们原创 2020-12-09 01:56:32 · 163 阅读 · 0 评论 -
链表中的倒数第k个节点
一、题目输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。来源:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/这条url怎么用的是拼音啊。。。二、思路注意,走了多少步就是过了多少距离,距离和长度不一样,比如原创 2020-12-09 02:21:19 · 1952 阅读 · 0 评论 -
关于leetcode中关于栈的题目的运行速度优化问题
一、问题今天刷题的时候,总有疑惑,为什么自己代码的思路和别人差不多却总是慢那么多,然后才发现原来是我使用的是java自带的栈的问题,而别人用的是自己数组实现栈。使用java提供的栈的运行时间:而改成数组实现栈后的时间:二、问题根源其实就是java提供的栈初始化的时候固定了长度,是10:java.util.Stack继承了java.util.Vector类。java.util.Stack类只有一个构造方法:public Stack() {},因此会调用到父类里的构造方法public V原创 2021-01-22 21:44:49 · 170 阅读 · 0 评论 -
leetcode1249.移除无效的括号
一、前言主要是因为这道题我没看评论和题解,并且我觉得自己的解法挺有趣,java代码的时间上击败100%,所以想记录一下。ps:对于用单调栈解的那些题目也很有趣,不过笔记记在本地上了。二、题目网址:https://leetcode-cn.com/problems/minimum-remove-to-make-valid-parentheses/三、解题思路注意:在这一道题中,用于模拟栈和接收字符的数组都是同一个。栈底是数组中索引为 s.length()-1 的位置。接收字符则从字符数组原创 2021-01-24 19:10:54 · 231 阅读 · 0 评论 -
leetcode1424对角线遍历||的收获
一、前言今天做的leetcode上的一道题,想了几种方法,要么超时,要么就是空间不足。超时:插入法超时了空间不足:自定义栈空间不足,但是用java提供的栈就不会,大概是因为java提供的栈有个初始的长度,是会自动扩容的,而我自定义的栈是一开始就定好长度的,不用扩容,可能也是因为一开始初始化太大了就超过空间了。然后改用java提供的栈才通过,同时发现和速度第一个方法速度相差差不多4倍,看了一下第一名的代码,感觉能学到很多,因此记录下来。PS:我通过的方法和第一的方法都不是和排序有关的,但是这道题就是原创 2021-02-07 23:51:47 · 152 阅读 · 1 评论 -
学习平衡二叉树笔记
11_树结构实际应用(3)平衡二叉树(AVL 树)1、二叉排序树的问题看一个案例(说明二叉排序树可能的问题),给你一个数列{ 1,2,3,4,5,6 } ,要求创建一颗二叉排序树(BST),并分析问题所在:左子树全部为空,从形式上看,更像一个单链表;插入速度没有影响;查询速度明显降低(因为需要依次比较),不能发挥BST 的优势,因为每次还需要比较左子,其查询速度比单链表还慢。解决方案-平衡二叉树(AVL)。2、平衡二叉树基本介绍平衡二叉树也叫平衡二叉搜索树(Self-b原创 2021-03-11 02:34:54 · 248 阅读 · 1 评论