Java数据结构与算法
文章平均质量分 70
sqyaa.
已在谷底,怎么走都是向上
展开
-
两个数组的动态规划——最长公共子序列模型
1.考虑空串,即dp表多出一行一列, 代表某个字符串为空。2.考虑最后一个位置;是否相等;3.可在字符串最前面加虚拟位置以对应映射关系;4.一般横行是j,列是i。此时第一行代表第二个字符串不为空,即第一个字符串是空的。原创 2024-01-26 21:46:39 · 1103 阅读 · 0 评论 -
动态规划——01背包和完全背包
有一个背包能容纳的体积是v,现在有n个物品,第i个物品的体积为vi,价值为wi。(1)求这个背包至多能装多大价值的物品?(2) 若背包恰好装满,求至多能装多大价值的物品?输入描述:第一行两个整数n和V,表示物品个数和背包体积接下来n行,每行两个数u;和wi表示第i个物品的体积和价值原创 2024-01-16 17:05:44 · 1207 阅读 · 5 评论 -
动态规划——回文系列总结
介绍回文串或者子序列的基本解决思路,以及变成回文的最少操作次数和最长回文子序列原创 2023-11-17 01:55:58 · 193 阅读 · 7 评论 -
dp之最长的斐波那契子序列的长度&最长等差数列
请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。连续子数组 [4,-1,2,1] 的和最大,为 6。是数组中的一个连续部分。原创 2023-12-04 11:45:13 · 76 阅读 · 3 评论 -
记忆化搜索,dp——路径问题,最长递增子序列
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。网格的左上角 (起始点在下图中标记为 “Start” )。问总共有多少条不同的路径?原创 2023-11-22 17:56:23 · 82 阅读 · 1 评论 -
扫雷游戏到底啥规则?!dfs模拟实现规则
本篇文章dfs实现扫雷游戏的规则。第一次玩扫雷是小学,当时对这个游戏不太感兴趣,感觉就是看运气随便玩玩,如今再看,哈哈哈也是有规则的!刚玩了几把游戏没错就是刚才,哈哈哈哈哈哈,差点就赢了😭,虽然还是简单局!但足以摸清一小点规则。1.当揭示一个空白方格(周围没有雷)时,游戏会自动揭示周围的方格。2.每个数字表示该方格周围的雷的数量,周围就按照米字型!让我们一起来玩扫雷游戏!3.点到雷,玩家out。)中的下一个点击位置(原创 2023-11-21 02:19:24 · 130 阅读 · 2 评论 -
正难则反的floodfill
介绍dfs系列的 被围绕的区域,太平洋大西洋水流问题,核心思想就是正难则反,floodfill,正向思维:从每一个地方去看是否能到达大西洋和太平洋;逆向思维:从太平洋和大西洋的 边界出发 ,标记能达到的地方。标记两次true的就是。原创 2023-11-20 19:59:57 · 54 阅读 · 0 评论 -
dfs--不同路径Ⅲ&Floodfill--图像渲染,岛屿数量
错误原因:直接在for循环里面写 if(grid[i][j]==2){check[i][j]=true;返回在四个方向(上、下、左、右)上行走时,从起始方格到结束方格的不同路径的数目。关键:step=count(0的个数)+2(1,2两个结束位置)这样会导致0的个数都没统计完你就去递归了😅必然错了。才开始错误的原因是:我没有用bx和by,原创 2023-11-19 18:19:18 · 64 阅读 · 1 评论 -
单词搜索&黄金矿工
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。原创 2023-11-19 12:27:37 · 66 阅读 · 0 评论 -
最长公共前缀
介绍最长公共前缀的解法和连续子数组的最大和的dp,前缀和解法原创 2023-11-02 01:18:09 · 34 阅读 · 0 评论 -
挖坑法,Hoare,非递归法实现快速排序
快速排序的优化原创 2023-10-28 17:36:14 · 132 阅读 · 1 评论 -
Java双指针专题——1.移动0 2.复写0 3.快乐数4.盛最多水的容器5.有效三角形的个数 6.和为s的两个数字7.三数之和8.四数之和
给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]解释:调用函数后,输入的数组将被修改为:[1,2,3]输入:arr = [1,0,2,3,0,4,5,0]输入: nums = [0,1,0,3,12]输出:[1,0,0,2,3,0,0,4]输出: [1,3,12,0,0]原创 2023-06-27 11:17:09 · 139 阅读 · 6 评论 -
变态跳台阶,这是我能想到的吗?
答案的解法,是 2 * 2 * ... * 2,那么乘多少次呢?.......因为最后一个台阶肯定要落脚的,所以答案就是 2 ^ (n-1)原创 2023-05-26 01:22:02 · 89 阅读 · 3 评论 -
牛客网——二叉树遍历
【代码】牛客网——二叉树遍历。原创 2023-04-16 17:12:46 · 32 阅读 · 0 评论 -
Java——栈和队列练习
引言中缀表达式转后缀表达式逆波兰表达式求值栈的压入,弹出序列栈的实现括号匹配问题队列用栈实现队列原创 2023-04-04 08:38:57 · 393 阅读 · 3 评论 -
Java初阶数据结构练习
9.斐波那契数列如0,1,1,2,3,5,8,13,21,.......,给定一个任意的数字,问它还有几步能变成斐波那契数。5.用不带头的单链表存储队列,其对头指针指向对头结点,队尾指针指向队尾节点,则在进行出队操作时()3.一颗二叉树的前序遍历是BCDEFAG,后序遍历是DCFAEGB,那麽他的后序遍历是。8.假设有100MB的内存,需要对1GB的数据进行排序,最合适的算法是:归并排序。4.一颗完全二叉树,根节点编号1,问编号为98的父亲节点编号是 (49)C.队头指针,队尾指针都有可能需要修改。原创 2023-04-04 08:38:54 · 448 阅读 · 3 评论 -
Java——堆笔记+topk问题+堆排序
父亲节点:(child-1)/2;此时节点:((len-1)-1)/2。原创 2023-03-17 09:42:07 · 689 阅读 · 5 评论 -
Java——Map和Set的使用
Map和Set是适合动态查找的集合容器,原创 2023-03-15 01:06:07 · 669 阅读 · 7 评论 -
从前序和中序遍历序列构建二叉树 和 从中序和后序遍历序列构建二叉树
请构造二叉树并返回其根节点。原创 2023-04-16 18:19:50 · 101 阅读 · 2 评论 -
栈的压入,栈的弹出,最小栈,用队列实现栈,设计循环队列
输入两个整数序列,第一个序列表示栈的压入序列,判断第二个序列是否可能是该栈的弹出序列,假设压入栈中的所有数字均不相等,如pushA:1,2,3,4,5是某栈的压入序列,序列popA:4,5,3,2,1是该栈序列对应的一个弹出的一个弹出序列。* 3.出栈:每次出栈都要和栈顶元素进行比较,如果和栈顶元素一样,那麽就要两个栈都得出。* 2.从第二次开始,每次入栈,都要和栈顶元素进行比较,小于的话就入栈。* 1.当栈中第一次存放数据时,两个栈中都要存放元素。结论:栈为空的时候,说明是可能的出栈序列。原创 2023-04-16 17:12:08 · 404 阅读 · 1 评论 -
带头单向链表源码及相关练习
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。给定一个链表的头节点 head ,返回链表开始入环的第一个节点。如果链表无环,则返回 null。* 1.如果存在环,,那么当两个引用速度不一样时,一定会在环里相遇。个节点,从头节点开始,它们的值依次是。原创 2023-04-16 17:11:51 · 532 阅读 · 2 评论 -
《剑指Offer》二叉搜索树与双向链表
数据范围:输入二叉树的节点数 0 \le n \le 10000≤n≤1000,二叉树中每个节点的值 0\le val \le 10000≤val≤1000。要求:空间复杂度O(1)(即在原树上操作),时间复杂度 O(n)在中序遍历的同时修改left和right。输入一棵二叉搜索树,将该。原创 2023-04-04 08:38:20 · 62 阅读 · 3 评论 -
Java---打家劫舍ⅠⅡ
这些都属于简单多状态的动态规划问题。原创 2023-02-27 14:46:17 · 1354 阅读 · 5 评论 -
【Java】摩尔投票法(简洁明了)
摩尔投票法用于找到一个数组中出现次数超多数组长度一半的元素。初始化;由于不同的票之间是相互对立的,当当前的被投票候选人与下一个被投票的候选人相同时,投票数++,不同时投票数--;当投票数vote=0时,则将候选人更新为当前遍历到的这个候选人,如此重复;由于要找到的候选人的被投票个数超过数组长度的一半,遍历完数组后,得到的候选人candidate就是要找的。原创 2023-01-31 11:02:59 · 257 阅读 · 3 评论 -
Java——反转链表
输入:head = [1,2,3,4,5], left = 2, right = 4。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]来源:力扣(LeetCode)来源:力扣(LeetCode)输出:[5,4,3,2,1]输出:[1,4,3,2,5]原创 2023-03-21 08:27:10 · 912 阅读 · 1 评论 -
Java——HashMap中的冲突问题及hashCode与equals方法的重写
2.如果该位置中没有元素则直接插入新元素,如果该位置中有元素发生哈希冲突,使用线性探测找到 下一个空位置,插入新元素。3.采用闭散列处理哈希冲突时,不能随便物理删除哈希表中已有的元素,若直接删除元素会影响其他 元素的搜索。,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中。不同的关键字通过相同的哈希函数有可能计算出相同的哈希地址,这种情况叫做哈希冲突或者哈希碰撞。* 实例内部类中包含两个this,一个是外部类的this,一个是自己的this。原创 2023-04-04 08:36:35 · 1498 阅读 · 2 评论 -
Java——常见的排序总结
2.partition过程中把与基准值相同的数也挑选出来。pivot左边有两个元素:pivot>left+1;* 1.选择基准很重要,通常选用几数取中法。可能会导致出现单分支情况。右边有两个元素:pivot原创 2023-04-04 08:38:34 · 347 阅读 · 2 评论 -
Java——二叉树的非递归前中后遍历
这里难点是:外层循环是思考到最后写出来的。原创 2023-03-21 08:30:28 · 83 阅读 · 3 评论 -
Java——二叉树的最近公共祖先及二叉搜索树介绍
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”提示:树中节点数目在范围 [2, 105] 内。-109原创 2023-03-15 01:13:50 · 873 阅读 · 6 评论 -
Java——二叉树
度为0的节点产生0条边,度为1的节点有n1个 产生n1条边,度为2的节点有n2个 产生2*n2条边,二叉树有N个节点,一棵二叉树,有n0(度为0的节点),n1(度为1的节点),n2(度为2)有。3.二叉树不存在度大于2的节点,二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。:以某节点为根的子树中任一节点都称为该节点的子孙。:若一个节点含有子节点,则这个节点称为其子节点的父节点;2.在具有2n个节点的完全二叉树中,叶子节点的个数是 (n )个。:一个节点含有的子树的根节点称为该节点的子节点;原创 2023-03-12 22:55:08 · 795 阅读 · 2 评论 -
Java——包装类和List及ArrayList
javap-c(jdk 中一个反编译工具来查看下自动装箱和自动拆箱过程,并且看到这个过程是发生在编译期)(int index, E element) 将下标 index。种基本数据类型的包装类,在使用过程 中,会将类似 int。(int index, E element) 将 e。(int index) 获取下标 index。(Object o) 删除遇到的第一个 o。(int index) 删除 index。(Object o) 返回最后一个 o。(Object o) 返回第一个 o。原创 2023-03-05 02:41:50 · 985 阅读 · 6 评论 -
Java——异常
程序在运行时出现错误时通知调用者的一种机制(已经编译得到了class文件,再由JVM执行过程中出现的错误)。异常处理主要的5个关键字throwtrycatchfinalthrows。1.自定义异常类,然后继承自Exception或者2.实现一个带有String类型参数的构造方法,参数含义:出现异常的原因3. 继承自Exception的异常默认是受查异常4. 继承自的异常默认是非受查异常。原创 2023-03-01 17:27:53 · 684 阅读 · 2 评论