
数据结构
等待的疲倦
本科自动化,硕士双控,研究范围广泛,课题为医疗机器人,学习过C++,目前对Java感兴趣
展开
-
Java单链表:常见操作整理
首先明确两个概率:头结点和头指针头结点:头结点是为了操作的统一与方便而设立的,放在第一个元素结点之前,其数据域一般无意义(当然有些情况下也可存放链表的长度);头结点不是必须的!;头结点后面的第一个节点称为首元结点。头指针:头指针是指链表指向第一个结点的指针,若链表有头结点,则头指针就是指向链表头结点的指针。没有头结点,头指针就指向首元节点,如图所示。LeetCode中的head,一般是头指针,指向首元节点!解题时可将head视作第一个节点题一、删除链表指定值的结点注:输入为头指针。头指原创 2020-05-14 00:14:44 · 661 阅读 · 0 评论 -
二叉树的子树+判断两树相等or对称+合并二叉树+翻转二叉树+二叉树路径
【另一棵树的子树】给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode...原创 2020-05-07 19:31:35 · 505 阅读 · 0 评论 -
二叉搜索树的基本操作汇总
一、什么是二叉搜索树?对于其每个结点K,其左子树都小于K的值,右子树都大于K的值可以得出一个性质:——如果一个二叉树的中序遍历是单调递增的,那么它就是二叉搜索树!二、验证是否为二叉搜索树——先对二叉树进行中序遍历,看它是不是单调递增的/** * Definition for a binary tree node. * public class TreeNode { * ...原创 2020-05-07 23:57:57 · 268 阅读 · 0 评论 -
二叉树的遍历 + 深度与高度 + 树的直径 +二叉树转单链表
二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNo...原创 2020-05-08 11:58:56 · 356 阅读 · 0 评论 -
用两个栈实现队列 + 用两个队列实现栈
【代码】用两个栈实现队列 + 用两个队列实现栈。原创 2023-06-08 21:35:41 · 398 阅读 · 0 评论 -
替换字符串指定单词的所有异位词(回溯,全排列,字符串替换)
把字符串中的单词替换掉,单词可以是异位形式的,如:要替换you,需要把ouy,uyo,等等都替换掉。输入:youi love you,ouy love mejack输出:i love jack,jack love me.思路:全排列!import java.util.*;public class Main1{ public static void main(String[] args){ Scanner sc = new Scanner(System.in)原创 2020-09-08 21:21:48 · 263 阅读 · 1 评论 -
网格问题(回溯/DP):最短路径(排除障碍物)+路径数量+路径最大/小和+判断路径存在
一、网格中的最短路径——回溯LeetCode1293:网格中的最短路径给你一个 m * n 的网格,其中每个单元格不是 0(空)就是 1(障碍物)。每一步,您都可以在空白单元格中上、下、左、右移动。如果您 最多 可以消除 k 个障碍物,请找出从左上角 (0, 0) 到右下角 (m-1, n-1) 的最短路径,并返回通过该路径所需的步数。如果找不到这样的路径,则返回 -1。class Solution { public int shortestPath(int[][] grid, int k)原创 2020-09-02 20:38:40 · 14055 阅读 · 3 评论 -
平衡二叉查找树(AVL)的构建——左旋右旋
原文链接:https://www.cnblogs.com/ZhaoxiCheung/p/6012783.html平衡二叉树,又称AVL(Adelson-Velskii和Landis)树,是带有平衡条件的二叉查找树。这个平衡条件必须要容易保持,而且它必须保证树的深度是 O(log N)。一棵AVL树是其每个节点的左子树和右子树的高度最多差1的二叉查找树( 空树的高度定义为 -1 )。查找、插入和删除在平均和最坏情况下都是 O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。1、LL转载 2020-08-25 12:45:07 · 626 阅读 · 0 评论 -
括号生成(DFS) + 括号匹配 +最长括号子串 + 24点
括号匹配给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效import java.util.Scanner;import java.util.Stack;public class Solution{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){原创 2020-08-14 12:24:28 · 239 阅读 · 0 评论 -
动态规划DP——斐波那契 + 间隔子序列最大和 + 连续子序列最大和 + 最长连续序列(非DP)
【LeetCode198】你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。class Solution { public int rob(int[] nums) { int len = nums.length; if(le原创 2020-06-10 11:04:04 · 703 阅读 · 0 评论 -
2Sum,3Sum,4Sum问题(Java)
【问题】知道nums[ ] ={ }和target,返回nums中能够得出target的两个元素一、2Sum问题1.1 nums中只有一对元素满足时eg: 只有唯一解的情况,如:[5,3,1,6],target=9,结果为[3,6]import java.util.*;public class Solution { public static void main(String[] args){ int[] nums = {5,3,1,6}; int target = 9; in原创 2020-08-01 20:49:00 · 318 阅读 · 0 评论 -
重建二叉树Java(前序和中序+中序和后序)
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。LeetCode面试题07例如,给出:前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left;原创 2020-06-11 15:16:07 · 475 阅读 · 0 评论 -
排列组合(回溯):全排列+N皇后+递增子序列+电话号码组合+和为目标值的组合+k个数的组合
参考LeetCode46题解回溯公式:result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 递归:backtrack(路径, 选择列表) 撤销选择其核心就是 for 循环里面的递归,在递归调用之前「做选择」,在递归调用之后「撤销选择」一、全排列给定一个 没有重复 数原创 2020-05-28 00:48:37 · 572 阅读 · 0 评论 -
平衡二叉树判断
实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。class Solution { public boolean isBalanced(TreeNode root) { if(root == null) return true; if(Math.abs(depth(root.left)-depth(root.right))>1){//判断当前结点的左右子树 return false; }else{//递归遍历左右转载 2020-05-26 15:21:16 · 192 阅读 · 0 评论 -
图的连通分量(岛屿数量)
import java.util.Scanner;import java.util.Arrays;public class Main2{ private static int color[],map[][]; private static int count,N; public static void main(String[] args){ Scanner sc = new Scanner(System.in); //while(sc.hasNext()){ N = sc.n.原创 2020-05-12 22:52:03 · 490 阅读 · 0 评论 -
贪心算法实例汇总(分糖果、加油站、面试调度)
【分糖果问题】老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入: [1,0,2]输出: 5解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。...原创 2020-05-07 14:30:54 · 502 阅读 · 0 评论 -
Java数据结构 之 递归问题(递归打印问题)
递归调用规则:1.当程序执行到一个方法时,就会开辟独立的空间(栈帧)2.每个空间的数据(局部变量),是独立的。(比如下面的图,每个栈帧都有一个n变量,互不影响)3.递归的一个方法执行完毕,或者遇到return,就会返回到调用该方法的地方。一、递归打印问题public class RecursionTest { public static void main(String[] arg...原创 2020-03-27 17:03:11 · 537 阅读 · 0 评论 -
Java通过数组模拟队列
结构:front:随着数据输出而改变 (输出:+)rear:随着数据输入而改变 (输入:+)实现:数组或链表数据存入队列(addQueue)的思路:尾指针rear+1若rear小于maxSize-1,则将数据存入rear所指的数组位置中若rear=maxSize,则队列满一、单队列package queue;//数组模拟队列public class ArrayQueu...原创 2020-03-26 22:20:48 · 267 阅读 · 0 评论 -
Java栈实现——逆波兰表达式计算器
实际需求输入一个计算表达式,并计算结果,计算机底层会将它作为一个“字符串”——用到了栈(stack)应用场景:1)二叉树遍历;2)表达式的转换:中缀表达式转后缀表达式 与求值(实际解决);3)图的深度优先(depth - first)搜索法。插入和删除操作时:栈顶Top变化,栈底Botton固定。出栈:pop,入栈:push实现栈的工具:数组or链表实现栈的具体...原创 2020-03-26 10:32:36 · 336 阅读 · 0 评论 -
【完整程序】Java实现单链表+双链表操作+单向循环链表
参考自视频:《尚硅谷Java数据结构和Java算法》,并对代码进行详细解释public class SingleLinkedListDemo { public static void main(String[] args) { //创建结点对象 HeroNode hero1 = new HeroNode(1,"宋江","及时雨"); HeroNode hero2 = new He...原创 2020-03-25 17:17:32 · 301 阅读 · 0 评论 -
【完整代码】二叉树的遍历与二叉树查找(Java实现)
一、前序遍历步骤:创建一棵二叉树先输出当前节点(根节点root)如果左子节点不为空,则递归继续前序遍历如果右子节点不为空,则递归继续前序遍历二、中序遍历步骤:创建一棵二叉树如果当前节点的左子节点不为空,则递归中序遍历输出当前节点(root)如果当前节点的右子节点不为空,则递归中序遍历二、后序遍历步骤:创建一棵二叉树如果当前节点的左子节点不为空,则递归后序遍历...原创 2020-03-21 20:46:37 · 363 阅读 · 0 评论 -
稀疏数组
一、概念当一个数组中大部分元素为0,或者为同一值数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法:1)第一行:记录几行几列,有几种不同值;2)把具有不同值元素的行、列及值记录在一个小规模的数组(即稀疏数组)中,从而缩小程序规模。二、实际应用需求因此记录了很多没有意义的数据,需要压缩。二维数组转稀疏数组:1)遍历原始二维数组,得到数据个数;2)根据sum就可以创建稀疏...原创 2020-02-01 21:04:34 · 125 阅读 · 0 评论 -
Java排序算法汇总
一、冒泡排序算法步骤:(1)比较前后两个数据,若前面的大于后面的,则交换;(2)遍历后,最大的数据“沉到了数组N-1位置(3)最大的数据搞定后,对其它的N-1个数据进行处理:N=N-1,只要N>0,则重复前面。public class 冒泡排序 { public static void bubbleSort(int[] a,int N) { int i,j; for(...原创 2019-12-11 21:57:26 · 297 阅读 · 0 评论 -
二分法查找和线性查找
//要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列public class 练习题1_1 { public static int BinarySearch(int[] arr,int key) { int low = 0; int high = arr.length -1; int mid = 0; if(key < arr[low]...原创 2019-11-30 19:52:26 · 390 阅读 · 0 评论