
数据结构
文章平均质量分 95
来学习的小张
加油学习,努力进步
展开
-
Java中反射、枚举及lambda表达式的使用
目录一、反射1.1 定义1.2 用途1.3 反射基本信息1.4 与反射相关的类1.5 Class类(反射机制的起源 )1.6 Class类中的相关方法1.7 获得Class对象的三种方式1.8 反射的使用1.9 反射优点和缺点二、枚举2.1 Enum 类的常用方法2.2 枚举的优点和缺点三、Lambda 表达式总结一、反射1.1 定义Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到,那原创 2022-03-02 18:01:05 · 1437 阅读 · 5 评论 -
搜索树与哈希表详解
目录一、搜索树1.1 概念1.2 查找1.3 插入1.4 删除1.5 性能分析1.6 与java集类的关系二、哈希表2.1 概念总结一、搜索树1.1 概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;若它的右子树不为空,则右子树上所有节点的值都大于根节点的值;它的左右子树也分别为二叉搜索树。如:1.2 查找若根节点不为空:如果根节点==查找key 返回当前节点;如果根节点 >查找key在原创 2022-02-27 17:24:49 · 1302 阅读 · 20 评论 -
动态规划问题经典例题
DP(Dynamic Programming)定义:动态规划是分治思想的延伸,通俗一点来说就是大事化小,小事化无的艺术。在将大问题化解为小问题的分治过程中,保存对这些小问题已经处理好的结果,并供后面处理更大规模的问题时直接使用这些结果。动态规划具备了以下三个特点:把原来的问题分解成了几个相似的子问题。所有的子问题都只需要解决一次。储存子问题的解动态规划的本质,是对问题状态的定义和状态转移方程的定义(状态以及状态原创 2022-02-23 22:07:13 · 8009 阅读 · 11 评论 -
面试相关高频算法考点4
目录一、求二叉树深度二、异或理解,求数组中只出现一次的两个数三、滑动窗口,求和为S的连续正数序列总结一、求二叉树深度牛客链接描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。方法一:使用递归方式分别遍历根的左和根的右,然后取两边中较大的一边,最后再加上有根节点的那一层就是整棵树的深度。public class Solution { public int TreeDepth(TreeNod原创 2022-02-15 20:26:38 · 754 阅读 · 15 评论 -
面试相关高频算法考点3
目录一、字符串的排列二、使用步骤一、字符串的排列牛客链接描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串 abc,acb,bac,bca,cab 和 cba 。import java.util.ArrayList;import java.util.*;public class Solution { //交换字符 public void Swap(char[] str,int i,int j){原创 2022-02-12 23:24:14 · 519 阅读 · 13 评论 -
面试相关高频算法考点2
目录一、替换空格二、从尾到头打印链表一、替换空格牛客链接描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路:根据题目描述中将一个字符串中的每个空格替换成“%20”,则相比于原字符串长度每出现一个空格进行替换时都会增加2个位置的长度,因此我们可以先计算出整个字符串中增加的长度,然后用一个指针指向原来字符串长度的结尾位置,另一个指针指向增加长度之后其字符串长度结尾的位置,依次从后往原创 2022-02-07 20:02:17 · 620 阅读 · 5 评论 -
数组相关高频算法考点
文章目录一、调整数组顺序使奇数位于偶数前面二、判断二维数组中是否包含某数三、旋转数组的最小数字四、数组中出现次数超过一半的数字一、调整数组顺序使奇数位于偶数前面牛客链接描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路:此题要求奇数与偶数的相对位置不发生改变,并且奇数要位于偶数的前面,此时我们可以利用插入排序的思想:让奇数插入到数组的前面,偶数统一往后移动,以此达原创 2022-01-30 22:05:19 · 1257 阅读 · 9 评论 -
Java常见的排序算法详解
目录一、直接插入排序二、使用步骤1.引入库一、直接插入排序 public static void insertSort(int[] arr){ for (int i = 1; i < arr.length; i++) { int tmp = arr[i]; int j = i - 1; for ( ; j >= 0 ; j--) { if (arr[j] >原创 2022-01-25 22:49:26 · 991 阅读 · 12 评论 -
Java关于二叉树的16个经典例题
目录一、二叉树的前序遍历二、二叉树的中序遍历三、二叉树的后序遍历四、判断两棵树是否相同五、判断一棵树是否是另一棵树的子树六、判断一棵树是否为平衡二叉树(AVL树)七、判断一棵树是否为对称二叉树一、二叉树的前序遍历144.二叉树的前序遍历方法一:class Solution { List <Integer> tmp = new ArrayList<>(); public List<Integer> preorderTraversal(Tree原创 2022-01-22 19:49:39 · 1932 阅读 · 7 评论 -
Java优先级队列(堆)及对象的比较
目录一、二叉树的顺序存储1.1 存储方式1.2 下标关系二、堆(Heap)2.1 堆的相关概念2.2 操作-向下调整一、二叉树的顺序存储1.1 存储方式使用数组保存二叉树结构,方式即将二叉树用层序遍历方式放入数组中。一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。这种方式的主要用法就是堆的表示。1.2 下标关系已知双亲(parent)的下标,则:左孩子(left)下标 = 2 * parent + 1;右孩子(right)下标 = 2 * parent + 2;已知孩子(不原创 2022-01-13 17:19:50 · 727 阅读 · 17 评论 -
Java中关于二叉树详解
目录一、树形结构1.1 相关概念1.2树的表示形式1.3树的应用:文件系统管理(目录和文件)二、二叉树2.1相关概念2.2 二叉树的基本形态2.3 两种特殊的二叉树2.4 二叉树的性质2.5 二叉树的存储2.6 二叉树的基本操作2.6.1二叉树的遍历2.6.2 二叉树的基本操作总结一、树形结构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:有一个特殊的节点,称为根节点,原创 2022-01-10 20:49:30 · 3225 阅读 · 14 评论 -
Java中关于泛型、包装类及ArrayList介绍
目录一、泛型1.1 泛型类的定义1.2 泛型类的使用1.3 泛型总结二、包装类2.1基本数据类型和包装类直接的对应关系2.2 包装类的使用,装箱(boxing)和拆箱(unboxing)2.3 自动装箱(autoboxing)和自动拆箱(autounboxing)三、List 的使用3.1 ArrayList简介3.2 ArrayList的构造3.3 ArrayList的遍历3.4 ArrayList的常见操作3.4.1 删除 index 位置元素(remove)3.4.1尾插(add)3.4.2将元素插入原创 2021-12-05 11:34:49 · 1723 阅读 · 19 评论 -
Java中顺序表及链表详解
目录一、线性表二、顺序表应用示例:实现一个动态顺序表1.打印顺序表2.获取顺序表长度3.在 pos 位置新增元素4.判定是否包含某个元素5.查找某个元素对应的位置6.获取pos位置的元素7.给 pos 位置的元素设为/更新 value8.删除第一次出现的关键字key9.清空顺序表总结一、线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但原创 2021-11-03 17:22:35 · 1955 阅读 · 17 评论