数据结构
文章平均质量分 57
qq_40707269
这个作者很懒,什么都没留下…
展开
-
java关于枚举
我们已经有了静态常量,为什么还要有枚举?静态常量看起来很美好,我们直接讲一个变量定义为一个常量来使用缺点是,我们没办法限制调用者传递什么数值进来最重要的问题是,你没办法直观的告诉数据传递者,我要传什么数值进来,毕竟整体只是int类型数据,并没有说数据范围,数据使用者也并不知道应该传递什么数值进来枚举的关键:1.帮助我们限定语意2.在编译阶段就限定...原创 2022-10-09 22:31:52 · 64 阅读 · 0 评论 -
python基础中 if_name == main
讲一下这段代码作用原创 2021-11-21 00:38:34 · 600 阅读 · 0 评论 -
匿名内部类开启线程
import java.util.Scanner;/*匿名内部类创建多线程 1.匿名,顾名思义,没有名字,用于简化代码 把子类继承父类,重写父类方法,创建子类对象合成一步完成 把实现类接口,重写接口中方法,创建实现类对象合成一步完成 2.内部类,写在其他类内部 最终产物,创建子类/实现类对象方法;new 父类/接口(){重写方法} */public class Queue { public static void main(String[]..原创 2021-08-11 23:22:11 · 375 阅读 · 0 评论 -
回溯算法fsdafasd
将题目转化为递归树的问题。用一个List装载回溯的值,当一个回溯到达底层时候,用一个List去装载回溯的值,每次重新回溯的时候都要注意,当你重新回溯时候,一定一定要把List中值取消掉,也就是说回溯算法需要取消掉自己的操作。1.步骤,用一个List<List> res装载返回值用一个List跟着节点去遍历,遍历成功后,将路径值加进去,当到底的时候,也就是list值等于数组长度时候,到底了。到底就记得要回溯回溯和递归回去有一个本质区别‘就像月光宝盒一样,你必须撤除自己做过的操作。..原创 2021-07-06 00:40:20 · 148 阅读 · 0 评论 -
lee二叉树题目
前序遍历 加 中序遍历求二叉树的样子。树中最重要的是在数组中找到左子树的下标范围和右子树的下标范围我们需要在中序数组中,去找到根节点的下标为了提高效率,我们可以把中序序列放进一个hash表里这样好找。查找效率很高。...原创 2021-06-27 20:23:59 · 86 阅读 · 1 评论 -
字符串匹配算法KMP算法
一种字符串匹配算法。上这个字,没匹配上,于是我们直接把子串拉倒上这里就行了。只要没匹配上我们就直接转移到最后一个需要匹配的那个位置,进行重新匹配。注意看这个细节,虽然整个句子匹配失败了,但是我的子句中,有跟子句开头部门一样的地方,而子句中第二次出现跟开头一样的部分这里恰好成功了。所以,我们的子句要调到恰好成功的位置上进行再次进行比较。建立一个next表,用来回溯过去。next表说白了就是当匹配失败了之后,该往哪里去跳转子串的指针去跳转到哪里。一定要明白,什么叫后缀?后缀一定是有后.原创 2021-06-25 18:24:39 · 100 阅读 · 1 评论 -
动态规划问题
传统的递归树,计算效率非常低,因为内容太多了。所以我们需要优化递归函数就是高水平的动态规划这个题目的本质就是,想要解决凑11快钱的,问题,这样可以分为3个递归,只要解决凑10块钱(差一块11),凑9,或者凑6(差五块钱)的问题就行了。著名的背包问题明确状态和选择。会变化的就是状态,让状态变化的就是选择看起来就是自变量和因为变量一样,会发生变化的就是自变量,影响变化的因为就是因变量。明确dp数组的问题。...原创 2021-06-24 22:18:45 · 73 阅读 · 3 评论 -
关于图的一些介绍。
说变了,就是线性表和链表只有上线,下线没法违反监督上线,这一点很不好,我们需要的是上下线相互监督。这种是无向图,互相之间都是联通的,A - B = 1 B - A = 1表示彼此都是联通的意思。广度优先实在太傻逼了。就是取得一个节点的所有邻接节点,进去之后打印自己和所有邻接节点,然后将这些节点设置为访问过就行了。然后将所有节点都送去执行上述操作(执行前先判断一下有没有被访问过,只要没被访问过就送去执行上述操作)通过邻接矩阵方式实现深度优先广度优先题目写完了package org....原创 2021-06-24 18:32:44 · 118 阅读 · 1 评论 -
红黑树介绍
红黑树是基于2-3树的说白了,就是通过红色的线,将二叉树,变成2-3查找树红黑树节点中多一个color用来表明这是红的的还是黑色。红黑树中出现了,右侧节点为红色情况,需要进行左旋。两个红色在一条线上,就需要进行右旋。红黑树树插入过程中,实现细节很多。插入,直接组成一个3- 节点。直接左旋。一旦出现这种问题,该节点进行颜色翻转,红色变黑,黑色变红。向一个双键树插入节点,也就是向3节点树插入节点。向原始红黑树中,插入新的节点。红黑树插入过程要非常了解。多种情况原创 2021-06-24 10:14:24 · 63 阅读 · 0 评论 -
lee排序题目
class Solution { public String largestNumber(int[] nums) { int n = nums.length; String numsToWord[] = new String[n]; for(int i=0;i<n;i++){ numsToWord[i] = String.valueOf(nums[i]);//将数字转化为字符 } //co.原创 2021-06-23 13:06:20 · 59 阅读 · 0 评论 -
lee字符串题目
思路看了就懂了,不过强调几个点。首先是ans在循环时候就应该知道,当ans = “”只要有一次,就直接跳出循环。,后面没有任何对比的意义了ans和strs[]中数据进行比较时候,只要有一个前缀没对上,就应该立刻跳出循环,因为没有对比的意义了。class Solution { public String longestCommonPrefix(String[] strs) { if(strs == null){ return ""; ...原创 2021-06-23 11:39:36 · 104 阅读 · 0 评论 -
多叉树和B树
通过增加节点树,来降低树的,深度。花圈的是一个节点,一个节点里面放好几个数据项,来降低树的高度。节点的度,就是节点的子树的数量,一个节点有5个子节点,那么这个节点的度就是五。23树已然满足排序树的特点。B树,叶子节点和非叶子节点里都放数据,B+树,非叶子节点里只放数据检索范围,数据都在叶子节点里,所以树比较大,比较浪费。B+树的叶子节点是存放数据的链表。...原创 2021-06-22 19:13:34 · 124 阅读 · 0 评论 -
平衡二叉排序树AVL介绍
为甚么要诞生平衡二叉排序树?因为一般的二叉树,面对有序数组,会变得很畸形。这种就是畸形而且诡异的东西。平衡二叉树的核心是要平衡,一个二叉排序树如果不平衡,我们需要通过旋转的方式让它变得平衡,不然肯定不行啊同志。一定要清楚知道二叉树的,左右高度。左右高度差,小于2就是平衡的,大于2就不平衡了。先进行分类一共4个分类找到出问题那个节点的父亲节点,你的孩子影响了高度,你就要承担责任·,需要找到父亲节点。找到出问题节点的父亲节点。然后根据父亲节点的位置,判定是什么问题类型?是rr?rl?ll原创 2021-06-22 18:06:17 · 113 阅读 · 0 评论 -
二叉排序树
二叉排序树的本质插入某个节点时候,根节点开始比较,比根小就往左找比根大往右找,一直找到某个叶子节点,然后为左或者右为空,然后放进去。二叉排序树本质就是左边节点小于根,右边节点大于根二叉排序树,进行中序遍历,正好是从小到大关系。直接将数组变成二叉排序树方法首先是节点package org.example.sort;public class HeroNode{ //实现这个接口之后,可以按照你想要方式进行排序 public int no; public He.原创 2021-06-21 23:12:15 · 722 阅读 · 0 评论 -
霍夫曼编码树的一些介绍
节点上的值就是权值。构建一个赫夫曼树的核心就是需要将权值大的值,接近根节点,介绍路径。说白了就是影响力大的地方军阀,一定要防放在自己身边,不能让这些人远离自己搞小动作,不然不知道他们背着自己搞什么小动作。构建霍夫曼树,先进行排序。然后取出最小值,去建立一个二叉树,这个二叉树的根节点就是两个叶子节点的值得和。然后再拿一个比较小的节点出来,和已经做好的树进行组合,再次捣鼓出来一个树。然后根据合并之后根节点,去比较,然后创造新的二叉树说白了就是,每次取出来最小的两个值,做成一个二叉树,新..原创 2021-06-21 21:16:09 · 285 阅读 · 0 评论 -
二叉树介绍和题目
增删改查都挺快。原创 2021-06-19 00:08:20 · 57 阅读 · 2 评论 -
Leetcode简单题目
两个思路,第一是将所有节点存进hashSet里面看重复不重复,第二个思路是快慢指针,一个指针走的快,另一个走到慢,两个指针相遇时候说明,出现环了,就是套环嘛。说白了就是给你俩链表,若两个链表是相交的,请你把相交那个第一个节点找出来说白了就是为了消灭长度差,让A,B两个指针,A指针遍历完自己后,顺路把B链表也遍历一个,B链表遍历完自己后,顺手把A也遍历一下,这样倘若A,B能相遇,说明有公共节点假设A长度是a,a的头部到node的长度是nodea,B长度是b,B头到焦点位置是nodeB我们都知.原创 2021-04-23 23:24:05 · 146 阅读 · 1 评论 -
JAVA循环队列
基本循环队列中,rear指向队尾数据的后一位,不存放数据(rear - front + maxSize)% maxSize用来判断有效数据(rear + 1) %maxSize用来判断满不满import java.util.Scanner;public class CIrcleArray { private int maxSize; private int rear; private int front; private int[] arr; //创建.原创 2021-01-29 20:44:50 · 830 阅读 · 0 评论 -
时间复杂度和空间复杂度计算
首先时间复杂度排序是这样的Tn = 3n + 3 ====== O(n)去掉常数和系数Tn是不是常数,如果是常数,那么时间复杂度是O(1)一个for(i ++ )的循环,时间复杂度是O(n),无论,i加的是几Tn= x * n,这种情况下,x作为时间常数是要被去掉的,所以时间复杂度是o(n)一个for循环涉及到for( i *= 2)这种情况下就是O(log2N)一个for循环外面一个 i *= 2,里面一个i += 2,或者反过来的,就是O(nlogn)空间复杂度为了避免内存超出限.原创 2021-01-28 21:21:43 · 561 阅读 · 0 评论 -
面试笔记介绍中关于哈希值的介绍
稍微讲一下哈希值这个东西哈希表—散列表一种存放数据用的数据结构哈希表通过哈希算法,将关键字,映射为哈希下标,有点像存储电话本,通过将关键字姓名,通过哈希算法(首字母)映射成为26个组群下标但是这种映射法,很容易出现hash冲突问题,既hash值很容易一样,比如电话里Z这个hash值之下,会有很多姓张的,这就叫hash冲突将hash数值相同的数据,存在相同hash值下面hash冲突解决方法:1.链表方式解决hash冲突方式2.开放地址解决hash冲突1.遇到冲,数据无法存在一个下原创 2021-01-21 15:43:17 · 1755 阅读 · 0 评论