自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 收藏
  • 关注

原创 Java基础:B树、B+树和红黑树的数据结构,三者区别

B树和B+树适用于磁盘存储,因为它们减少了磁盘I/O次数。红黑树适用于内存中的动态数据结构操作。B+树特别适合范围查询和顺序访问,而红黑树则在保持平衡的同时提供了高效的插入和删除操作。

2024-06-16 22:25:47 864

原创 Leedcode【226】. 翻转二叉树——Java解法(递归法)

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例 2:输入:root = [2,1,3]输出:[2,3,1]示例 3:输入:root = []输出:[]提示:树中节点数目范围在 [0, 100] 内-100 <= Node.val <= 100时间复杂度:空间复杂度:Java效果

2024-06-15 22:03:46 405

原创 Java面试:Redis如何保证数据一致性?

Redis通过事务机制、持久化(RDB和AOF)、主从复制、哨兵模式、集群模式、乐观锁以及原子操作等多种手段来保证数据的一致性和高可用性。在设计和使用Redis时,合理选择这些机制,根据业务需求进行优化,能够有效提高数据的一致性和系统的可靠性。

2024-06-13 18:27:40 622

原创 Java面试:final关键字有什么特点?

final关键字在Java中用于类、方法、变量和方法参数,可以防止继承、重写和重新赋值,从而增加程序的安全性、稳定性和可维护性。理解并善用final关键字是编写高质量Java代码的关键。

2024-06-13 13:06:30 316

原创 Java基础:说一下 Redis 和 Memcached 的区别和共同点

Redis 和 Memcached 都是常用的内存缓存系统,它们的主要作用是通过将数据存储在内存中来提高数据访问速度,从而减少对数据库的访问频率,提高系统的性能和响应速度。尽管它们有许多相似之处,但在功能、特性和使用场景上也有一些显著的区别。

2024-06-06 16:15:48 616

原创 Java基础:线程和线程体有什么区别?

定义线程(Thread):操作系统调度的最小单位,包含执行路径和线程状态。线程体(Runnable 或 run() 方法):线程执行的具体任务和逻辑。实现方式线程(Thread):在Java中通过继承Thread类或实现Runnable接口来创建。线程体(Runnable 或 run() 方法):通过实现Runnable接口的run()方法或重写Thread类的run()方法来定义。职责线程(Thread):负责线程的生命周期管理,如创建、启动、执行、终止。

2024-06-06 15:09:27 408

原创 Java基础:java有哪些特性?面试问到怎么回答?

在回答时,尝试结合你实际的项目经验和具体应用场景来说明Java特性的好处和应用。这不仅展示了你对Java语言的理解,还能展示你在实际项目中如何利用这些特性来解决问题和实现功能。

2024-06-05 14:45:27 840

原创 Java基础:&和&&有什么区别?

可以用作按位与运算符和逻辑与运算符。当用作逻辑与运算符时,它会评估两边的表达式(不短路)。&&是仅用于逻辑与运算符,并且具有短路特性。如果左侧操作数为false,右侧表达式不会被评估。在编写涉及布尔逻辑的代码时,通常会使用&&以利用短路特性来提高性能和避免潜在的错误。当需要对整数进行按位运算时,则会使用。

2024-06-05 14:33:00 442

原创 leedcode【698】. 划分为k个相等的子集——Java(贪心策略)

给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。示例 1:输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4输出: True说明: 有可能将其分成 4 个子集(5),(1,4),(2,3),(2,3)等于总和。示例 2:输入: nums = [1,2,3,4], k = 3输出: false提示:1 <= k <= len(nums) <= 160 < nums[i] < 10000每个元素的频率在 [1,4]

2024-06-04 15:35:54 566

原创 Java基础:深拷贝和浅拷贝

深拷贝(deep copy)和浅拷贝(shallow copy)是对象复制时的两种方式,它们在处理对象内部引用时有显著的区别。

2024-06-04 09:57:43 488

原创 华为od机考_机器人仓库搬砖_Java

【代码】华为od机考_机器人仓库搬砖_Java。

2024-06-03 16:52:08 271

原创 华为od机考_小华最多能得到多少克黄金_Java

【代码】华为od机考_小华最多能得到多少克黄金_Java。

2024-06-02 23:02:06 367

原创 华为od机考_传递悄悄话_Java(二叉树构建及求高度)

给定一个二叉树,每个节点上站着一个人,节点数字表示父节点到该节点传递情悄诺需要花费的时间。初始时,根节点所在位置的人有一个悄悄话根要传递给其他人,求二又树所有节点上的人都接收到悄悄话花费的时间。输入描述: 给定二叉树 0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2 注:-1表示空节点输出描述: 返回所有节点都接收到悄悄活花费的时间38示例一输入输出38。

2024-06-02 22:38:48 305

原创 华为od机考_找座位_Java

在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。现在给出一排观众座位分布图,座位中存在已落座的观众,请计算出,在不移动现有观众座位的情况下,最多还能坐下多少名观众。一个数组,用来标识某一排座位中,每个座位是否己经坐人。0表示该座位没有坐人,1表示该座位已经坐人。整数,在不移动现有观众座位的情况下,最多还能坐下多少名观众。1<=数组长度≤=10000输入 10001 输出 1输入 0101 输出 0。

2024-06-02 20:02:22 510

原创 华为od机考_虚拟游戏理财_Java(暴力解法)

在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。现有一家Bank,它提供有若干理财产品 m 个,风险及投资回报不同,你有 N(元)进行投资,能接收的总风险值为X。你要在可接受范围内选择最优的投资方式获得最大回报。

2024-06-02 18:56:22 147

原创 华为od机考_精准核酸检测_Java(深度优先搜索)

为了达到新冠疫情精准防控的需要,为了避免全员核酸检测带来的浪费,需要精准還定可能被感染的人群。现在根据传染病流调以及大数据分析,得到了每个人之间在时间、空间上是否存在轨迹的交叉。现在给定一组确诊人员编号(X1,X2,X3,…Xn),在所有人当中,找出哪些人需要进行核酸检测,输出需要进行核酸检测的人数。(注意:确诊病例自身不需要再做核酸检测) 需要进行核酸检测的人,是病毒传擂链条上的所有人员,即有可能通过确诊病例所能传强到的所有人。

2024-06-02 13:23:37 464

原创 华为od机考_最多购买宝石数目_Java(滑动窗口)

橱窗里有一排宝石,不同的宝石对应不同的价格,宝石的价格标记为 gems[i],0<=i<n, n = gems.length宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续;例如客户最大购买宝石个数为m,购买的宝石编号必须为gems[i],gems[i+1]...gems假设你当前拥有总面值为value的钱,请问最多能购买到多少个宝石,如无法购买宝石,则返回 0。

2024-06-01 17:52:03 233

原创 华为od算法_游戏分组_Java

部门准备举办一场王者荣耀表演赛,有 10 名游戏爱好者参与,分为两队,每队 5 人。每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把 10 名参赛者分为实力尽量相近的两队。一队的实力可以表示为这一队 5 名队员的评分总和。现在给你 10 名参与者的游戏水平评分,请你根据上述要求分队最后输出这两组的实力差绝对值。例: 10 名参赛者的评分分别为 5 1 8 3 4 6 7 10 9 2,分组为 (1 3 5 8 10) (2 4 6 7 9),两组实力差最小,差值为 1。

2024-06-01 17:06:15 262

原创 华为od算法_生成哈夫曼树_Java

给定长度为 n 的无序的数字数组,每个数字代表二叉树的叶子节点的权值,数字数组的值均大于等于 1。请完成一个函数,根据输入的数字数组,生成哈夫曼树,并将哈夫曼树按照中序遍历输出。为了保证输出的二叉树中序遍历结果统一,增加以下限制:在树节点中,左节点权值小于等于右节点权值,根节点权值为左右节点权值之和。当左右节点权值相同时,左子树高度高度小于等于右子树。注意: 所有用例保证有效,并能生成哈夫曼树提醒:哈夫曼树又称最优二叉树,是一种带权路径长度最短的一叉树。

2024-06-01 15:40:33 266

原创 华为od算法_万能字符单词拼写_Java

有一个字符串数组 words 和一个字符串 chars。假如可以用 chars 中的字母拼写出 words 中的某个“单词”(字符串),那么我们就认为你掌握了这个单词。words 的字符仅由 a-z 英文小写字母组成,例如 "abc"chars 由 a-z 英文小写字母和 "?" 组成。其中英文 "?" 表示万能字符,能够在拼写时当作任意一个英文字母。例如:"?" 可以当作 "a" 等字母。注意:每次拼写时,chars 中的每个字母和万能字符都只能使用一次。

2024-06-01 14:06:56 276

原创 leedcode【1160】. 拼写单词——Java解法(哈希表)

给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。返回词汇表 words 中你掌握的所有单词的 长度之和。示例 1:输入:words = ["cat","bt","hat","tree"], chars = "atach"输出:6解释:可以形成字符串 "cat

2024-05-31 20:05:04 348

原创 华为od算法题-小明找位置-Java解法

小明友出操,按学号从小到大排成一列;小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。算法复杂度要求不高于nLog(n);学号为堅数类型,队列规模<=10000;输入描述: 1、第一行:输入已排成队列的小朋友的学号(正整数),以”,”1隔开;例如:93 95 97 100 102 123 155 2、第二行:小明学号,如110;输出描述: 输出一个数字,代表队列位置(从1开始)。例如: 6 示例1 输入 93 95 97 100 102 123 155 110 输出 6。

2024-05-31 17:13:03 123

原创 leedcode【509】. 斐波那契数——Java解法(动态规划)

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给定 n ,请计算 F(n) 。示例 1:输入:n = 2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1示例 2:输入:n = 3输出:2解释:F(3) = F(2) + F(1) = 1 + 1 = 2示例 3:输入:

2024-05-31 15:49:35 594

原创 leedcode【455】. 分发饼干——Java解法(贪心)

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。虽

2024-05-31 15:24:41 491

原创 leedcode【77】. 组合——Java解法(回溯法)

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]示例 2:输入:n = 1, k = 1输出:[[1]]提示:1 <= n <= 201 <= k <= n回溯法三部曲:时间复杂度:空间复杂度:Java性能

2024-05-31 14:54:40 401

原创 leedcode【110】. 平衡二叉树——Java解法(递归法)

给定一个二叉树,判断它是否是平衡二叉树示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true提示:树中的节点数在范围 [0, 5000] 内-104 <= Node.val <= 104时间复杂度:空间复杂度:Java性能

2024-05-30 20:27:17 407

原创 leedcode【111】. 二叉树的最小深度——Java解法(递归)

给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 1:输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5提示:树中节点数的范围在 [0, 105] 内-1000 <= Node.val <= 1000对于每一个非叶子节点,我们只需要分别计算其左右子树的最小叶子节点深度。注:根节点没有左子树或没有右

2024-05-30 20:02:24 263

原创 leedcode【559】. N 叉树的最大深度——Java解法(迭代-层序遍历)

给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:3示例 2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]输出:5提示:树的深度不会超过 1000 。树的

2024-05-30 19:46:06 247

原创 leedcode【104】. 二叉树的最大深度——Java解法(递归,后序)

给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。示例 1:输入:root = [3,9,20,null,null,15,7]输出:3示例 2:输入:root = [1,null,2]输出:2提示:树中节点的数量在 [0, 104] 区间内。-100 <= Node.val <= 100时间复杂度:空间复杂度:Java性能

2024-05-30 19:25:26 214

原创 leedcode【101】. 对称二叉树——Java解法(递归)

给你一个二叉树的根节点 root , 检查它是否轴对称。示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false提示:树中节点数目在范围 [1, 1000] 内-100 <= Node.val <= 100进阶:你可以运用递归和迭代两种方法解决这个问题吗?时间复杂度:空间复杂度:Java性能

2024-05-30 16:59:14 229

原创 leedcode【102】. 二叉树的层序遍历——Java解法(迭代法)

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例 2:输入:root = [1]输出:[[1]]示例 3:输入:root = []输出:[]提示:树中节点数目在范围 [0, 2000] 内-1000 <= Node.val <= 1000时间复杂度:空间复杂度:Java性能

2024-05-30 15:54:24 268

原创 leedcode【145】. 二叉树的后序遍历——Java解法(迭代法)

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。示例 1:输入:root = [1,null,2,3]输出:[3,2,1]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]提示:树中节点的数目在范围 [0, 100] 内-100 <= Node.val <= 100进阶:递归算法很简单,你可以通过迭代算法完成吗?时间复杂度:空间复杂度:Java性能

2024-05-30 15:05:36 366

原创 leedcode【94】. 二叉树的中序遍历——Java解法(迭代法)

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100进阶: 递归算法很简单,你可以通过迭代算法完成吗?时间复杂度:空间复杂度:Java性能

2024-05-30 14:53:40 225

原创 leedcode【144】. 二叉树的前序遍历——Java解法(迭代法)

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100进阶:递归算法很简单,你可以通过迭代算法完成吗?时间

2024-05-30 14:32:37 491

原创 leedcode【144】. 二叉树的前序遍历——Java解法(递归)

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100进阶:递归算法很简单,你可以通过迭代算法完成吗?时间

2024-05-30 11:48:05 327

原创 leedcode【347】. 前 K 个高频元素——Java开发(小顶堆实现)

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:1 <= nums.length <= 105k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的进阶:你所设计算法的时间复杂度 必须 优于 O(n log

2024-05-30 10:20:39 1149

原创 leedcode【150】. 逆波兰表达式求值——Java解法(栈)

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。注意:有效的算符为 '+'、'-'、'*' 和 '/' 。每个操作数(运算对象)都可以是一个整数或者另一个表达式。两个整数之间的除法总是 向零截断 。表达式中不含除零运算。输入是一个根据逆波兰表示法表示的算术表达式。答案及所有中间计算结果可以用 32 位 整数表示。示例 1:输入:tokens = ["2","1","+","3","*"]输出:9解释:该算式转化为常

2024-05-29 17:07:40 801

原创 leedcode【1047】. 删除字符串中的所有相邻重复项——Java实现(栈)

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:"abbaca"输出:"ca"解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。提示:1 <= S.length <

2024-05-29 16:26:30 231

原创 leedcode【20】. 有效的括号——Java解法

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false提示:1 <= s.length <= 104s 仅由括号 '()[]{}' 组成注:s是奇数直接返回false最后判断栈是

2024-05-29 15:43:39 263

原创 leedcode【225】. 用队列实现栈——Java实现(一个队列实现)

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的标准操作 —— 也就是 push to back、peek/pop from front、size 和 is em

2024-05-29 15:15:06 782

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除