自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 23种设计模式解释+记忆

观策命责状,模访中备迭解(想象“观察策略命令的责任状,模仿访问中备用的迭代解决方案”)。:观察者、策略、命令、责任链、状态、模板方法、访问者、中介者、备忘录、迭代器、解释器。:6适配器、7桥接、8组合、9装饰器、10外观、11享元、12代理。:遥控器(抽象)和电视(实现)分离,遥控器可以控制不同品牌电视。:酒店前台(门面)帮你处理订房、订餐、叫车,你无需对接多个部门。:餐厅点餐,顾客点单(命令)交给服务员,服务员再通知厨师执行。:组装电脑,分步骤选CPU、内存、硬盘,最后拼成整机。

2025-05-18 22:15:23 1198

原创 关于Java八股中那些应知必会的事

ThreadLocal内存泄漏是什么?想象一个场景:你辞职了(线程任务结束),但你的私人储物柜(ThreadLocal)里还堆满了东西(数据)。由于柜子的钥匙(引用)和你的工牌(线程对象)没被销毁,清洁工(垃圾回收器GC)以为这些垃圾还有用,不敢清理。久而久之,公司(JVM)的储物区(内存)被塞满,最终爆仓(OOM内存溢出本质使用不当,导致无用数据无法被GC回收,占满内存。AQS 是什么?想象一个银行排队办业务AQS = 银行排队系统它管理着一个队列(排队的人),和一个状态变量。

2025-05-18 12:44:09 936

原创 打家劫舍3树型DP Java版详解

你是一个经验丰富的小偷,经过上次在街边和湖边得手后你准备挑战一次自己,你发现了一个结构如二叉树的小区,小区内每个房间都存有一定现金,你观察到除了小区入口的房间以外每个房间都有且仅有一个父房间和至多两个子房间。问,给定一个二叉树结构的小区,如之前两次行动一样,你无法在不触动警报的情况下同时偷窃两个相邻的房间,在不触动警报的情况下最多的偷窃金额。小区入口的房间的值是2 ,偷窃第一层2和第三层 2,1 是最优方案。样例2:小区入口的房间的值是3 ,偷窃第二层 2,10 是最优方案。思路:递归+树型DP。

2025-05-09 23:16:40 202

原创 java中PriorityQueue优先队列的思想及用法

优先队列(Priority Queue)是一种特殊的队列数据结构,它的特点是。优先级可以是元素自身的值,也可以是自定义的排序规则。:堆顶元素是最小值(默认实现)。:堆顶元素是最大值(可通过逆序比较实现)。插入(push):O(log n)取出最值(pop):O(log n)查看最值(peek):O(1)Java的默认基于最小堆实现。offer(e)add(e)poll()peek()isEmpty()操作系统中的进程调度(优先级高的任务先执行)。用于高效获取当前最短路径的节点。

2025-05-09 15:29:42 435

原创 华为5.7机考-最小代价相遇的路径规划Java题解

题目内容输入描述输出描述示例:21 22 13。

2025-05-09 15:26:13 753

原创 华为5.7机考第一题充电桩问题Java代码实现

【代码】华为5.7机考第一题充电桩问题Java代码实现。

2025-05-09 12:36:21 701

原创 Dijkstra 算法代码步骤[leetcode.743网络延迟时间]

有n个网络节点,标记为1到n。给你一个列表times,表示信号经过边的传递时间。,其中ui是源节点,vi是目标节点,wi是一个信号从源节点传递到目标节点的时间。现在,从某个节点K发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回-1。2邻接矩阵g存储边权。dis数组存储源点到各点的最短距离,初始为INF。done数组标记节点是否已确定最短路径。选择当前未处理的、距离最短的节点x。如果x不可达,返回-1。更新maxDis为dis[x](因为dis[x]是递增的)。

2025-04-27 21:05:17 814

原创 Java位运算符大全

所有位向右移动,高位补符号位(正数补 0,负数补 1)。处理无符号整数(Java 没有无符号类型,但可以用。:两个位都为 1 时,结果才为 1,否则为 0。:所有位向右移动,高位补 0(不考虑符号位)。:两个位有一个为 1 时,结果就为 1。:两个位不同时,结果为 1,否则为 0。:所有位取反(0→1,1→0)。:所有位向左移动,低位补 0。(任何数与 0 异或不变)。Java 使用补码表示负数,(相同数异或为 0)。

2025-04-27 20:50:12 1050

原创 动态规划求解leetcode300.最长递增子序列(LIS)详解

给你一个整数数组 ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如, 是数组 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,7,7,7,7,7]输出:1关键点 双重循环结构:外层

2025-04-26 17:01:06 1105

原创 NC149KMP算法详解

PMT表pmt[i]表示模式串S[0..i]的最长公共前后缀长度。用于在匹配失败时快速回退j。KMP搜索通过pmt表避免回溯i,保证i始终单向移动。O(n + m)n为文本串长度,m为模式串长度)。回退逻辑匹配失败时,j回退到pmt[j - 1]。完整匹配后,j回退到pmt[j - 1]以继续搜索。这个实现高效且正确,能够处理所有边界情况(如空串、无匹配、多次匹配等)。

2025-04-24 10:31:18 746

原创 Java常用正则表达式及使用方法

在 Java 中,Pattern和Matcher类是包的核心,用于处理正则表达式。Pattern。

2025-04-22 21:55:59 972

原创 Java双端队列(Deque)作为栈和队列的用法详解

(双端队列)是Java集合框架中的一个接口,它同时支持。:基于链表,支持更多操作(如随机访问)。:基于数组,性能更高(推荐使用)。

2025-04-14 17:14:47 604

原创 leetcode797图论-对邻接矩阵和邻接表不同形式进行dfs与bfs遍历方法

图论题目中除了邻接表还有邻接矩阵形式,可以将邻接表转换为邻接矩阵形式更为直观清晰。有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3。可以访问的所有节点的列表(即从节点。BFS遍历实现代码(基于邻接表)本题输入方式为邻接表方式输入。实现代码(基于邻接矩阵)实现代码(基于邻接矩阵),请你找出所有从节点。实现代码(基于邻接表)

2025-04-09 13:41:02 739

原创 图论leetcode797.所有可能的路径dfs

有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3。可以访问的所有节点的列表(即从节点。,请你找出所有从节点。

2025-04-08 15:34:15 551

原创 java回溯算法组合与排列代码模板

需先排序数组,当发现当前元素与前一个相同且前一个未被使用时,跳过当前分支。:递归回溯框架(选择 → 递归 → 撤销选择),但核心逻辑因问题特性而不同。表示当前元素与前一个相同,且前一个未被使用(说明是同一层的重复分支)。当剩余可选元素数量不足以填满路径时,提前终止循环。标记已选元素,剪枝跳过重复元素(需先排序)。控制选择范围,剪枝优化剩余元素不足的情况。数组标记已选元素,并添加剪枝处理重复。参数避免重复选择,并添加剪枝优化。个元素,但剩余元素不足。个,则跳过后续分支。

2025-04-07 21:32:06 514

原创 Java双指针解三数之和问题

【代码】Java双指针解三数之和问题。

2025-04-05 17:17:49 363

原创 Java暴力解四则运算问题

保证表达式字符串由 0−9 的数字、加法 ‘+’ 、减法 ‘-’、乘法 ‘*’ 、除法 ‘/’、小括号 (’,‘)’、中括号 ‘[’,‘] 、大括号 ‘{’,‘}’ 组成,且运算符之间没有空格。对于输入的表达式,保证其形式合法、计算过程中全程合法、计算过程中不需要使用到实数、结果 ans 满足 −103≦ans≦103。输入一个长度为 1≦len(s)≦103、由题面所述符号构成的字符串,代表一个表达式。满足 −103≦ans≦103。Nashorn是Java 8引入的高性能JavaScript引擎。

2025-04-05 15:13:35 299

原创 KMP求子串出现次数

要求:空间复杂度 O(len(S)),时间复杂度 O(len(S)+len(T))给你一个文本串 T ,一个非空模板串 S ,问 S 在 T 中出现了多少次。数据范围:1≤len(S)≤500000,1≤len(T)≤1000000。

2025-04-05 10:47:20 219

原创 java版KMP算法模板

构建部分匹配表(PMT),这是KMP算法的核心预处理步骤pmt[i]表示pattern[0...i]的最长公共前后缀长度时间复杂度:O(m),m为模式串长度:执行KMP搜索算法利用构建好的部分匹配表在文本中高效搜索模式串时间复杂度:O(n+m),n为文本长度文本:"ABABDABACDABABCABAB"模式串:"ABABCABAB"输出结果为模式串在文本中的起始位置和匹配部分。

2025-04-04 21:54:16 569

原创 动态规划解决HJ103梅花桩跳跃问题

Redraiment 是走梅花桩的高手。现在,地上有 n个梅花桩排成一排,从前到后高度依次为 h1,h2,…,hnRedraiment 可以任选一个梅花桩开始,向后跳到任意一个比当前高度高的梅花桩上。求 Redraiment 最多可以跳过多少个梅花桩。输入描述: 第一行输入一个整数 n(1≦n≦200) 代表梅花桩的数量。 第二行入n个整数, h1,h2,…,hn(1≦hi≦350)代表每一个梅花桩的高度。输出描述: 输出一个正整数,代表 Redraiment 最多可以跳过多少个梅花桩。 输入:62 5

2025-04-03 13:34:38 711

原创 leetcode.875 爱吃香蕉的珂珂(二分查找)

珂珂喜欢吃香蕉。这里有n堆香蕉,第i堆中有piles[i]根香蕉。警卫已经离开了,将在h小时后回来。珂珂可以决定她吃香蕉的速度k(单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉k根。如果这堆香蕉少于k根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在h小时内吃掉所有香蕉的最小速度kk为整数)。43023。

2025-04-01 17:04:34 833

原创 HJ96 表示数字(正则表达式一行解决)

对于给定的由字母和数字混合构成的字符串 s,找到全部的连续数字子串,并在每一个子串的前后添加星号(*);其余字符保持不变。子串为从原字符串中,连续的选择一段字符(可以全选、可以不选)得到的新字符串。

2025-03-31 18:51:29 222

原创 Java 正则表达式详解(简单易懂版)

正则表达式(Regular Expression)是一种用来描述字符串模式的特殊语法,可以用来:检查字符串是否符合某种格式从字符串中提取特定部分替换字符串中的内容。

2025-03-31 18:19:30 2055

原创 面试题 08.08. 有重复字符串的排列组合

有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。

2025-03-31 10:53:38 682

原创 java中Map和Set方法合集

遍历Map的所有键值对。:遍历Set中的元素。

2025-03-30 16:06:00 609

原创 字符串:HJ29字符串加解密

HJ29 字符串加解密规定这样一种密码的加密方法:∙ ∙对于密码中的英文字母,按照字母表顺序,向后移动一位,同时改变大小写,即 Z 转换为 a ,A 转换为 b ,B 转换为 c ,⋯⋯ ,Y 转换为 z ,Z 转换为 a。∙ ∙对于密码中的数字,增加 1 ,9 转换为 0。字符串的解密方法即为加密方法的逆过程。现在,对于给定的明文字符串 s ,将其加密;对于给定的密文字符串 t ,将其解密。

2025-03-30 12:48:31 188

原创 Java中对于不同的集合(Deque、Queue、Set、Map、List)遍历方法(详细版)

集合类型推荐遍历方式时间复杂度备注List增强for循环/迭代器O(n)随机访问用普通forSet增强for循环O(n)无序Queuepoll()消费式遍历O(n)通常不保留元素MapentrySet()遍历O(n)比keySet()+get()更高效Deque迭代器/增强for循环O(n)双端操作需特殊处理。

2025-03-30 10:58:56 517

原创 哈希+排序:HJ25数据分类处理

J25 数据分类处理对于给定的分类规则集 R={R1,R2,…,Rm},规范化它,具体地:∙ ∙将 R 中的整数按从小到大的顺序重新排序;∙ ∙去除 R 中的重复元素;记规范化后的分类规则集为 r={r1,r2,…,rm}。对于收集到的、由若干个整数组成的数据集 II ,按照下方的要求,使用规范后的分类规则集 rr 输出分类后的结果。∙ ∙对于第 i 条分类规则 ri,如果 I 中存在以 ri​ 为连续子串的整数,则该规则集有效;

2025-03-30 10:51:19 961

原创 动态规划解leetcode.5最长回文子串问题

子串。

2025-03-29 12:39:27 704

原创 动态规划解leetcode.322零钱兑换问题

其中 cj​ 代表的是第 j 枚硬币的面值。如手中有面值为1、2、5的硬币,需要七元,可以在F(7-5)=F(2)种可能的基础上增加一枚5元硬币(注:F(2)指需要2元时不同的硬币组合数量),因为新加入一枚硬币,所以F(2)+1;定义 F(i) 为组成金额 i 所需最少的硬币数量,假设在计算 F(i) 之前,我们已经计算出 F(0)−F(i−1) 的答案。(即未被更新过),说明无法凑出目标金额,返回。:将问题分解为子问题(凑出更小的金额)。你可以认为每种硬币的数量是无限的。,即最少需要的硬币数。

2025-03-29 11:26:56 1045

原创 动态规划(DP)、深度优先搜索(DFS)和回溯算法的区别

当需要系统地尝试各种可能性,并能通过剪枝优化时。:当需要遍历或搜索所有可能性,且不关心最优解时。:当问题可以分解为重叠子问题,且需要最优解时。存储子问题的解以避免重复计算(记忆化)通常采用自底向上或带记忆的自顶向下方法。遇到"死路"时回退一步(回溯)可能需要大量内存(递归深度)时间复杂度可能很高(指数级)时间复杂度通常为多项式级别。适合遍历或搜索所有可能的解。将大问题分解为重叠子问题。适用于有最优子结构的问题。空间复杂度取决于状态数量。尽可能深地搜索树的分支。沿着树的深度遍历节点。通过剪枝减少搜索空间。

2025-03-29 10:52:43 565

原创 高频考点:岛屿数量 DFS+BFS解法

这是一个DFS应用于数组的典型例子,应用DFS将1相连的陆地遍历一遍,看一共需要遍历几次,便是几个岛屿。1.有无终止条件(撞南墙):当然有,当遍历时遇到水(0),超出数组边界(为水),就是到边界了;岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。2.有无成立条件(到终点):这个没有,可以将这个岛遍历一遍;(水)组成的的二维网格,请你计算网格中岛屿的数量。此外,你可以假设该网格的四条边均被水包围。3.是否需要记录轨迹:需要,防止路径重复;

2025-03-28 17:53:34 457

原创 leetcode BFS合集.139.815.130

返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。j=0:检查"leet"在字典中且dp[0]=true → dp[4]=true。j=4:检查"code"在字典中且dp[4]=true → dp[8]=true。在上图中,底部的区域没有被捕获,因为它在 board 的边缘并且不能被围绕。不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

2025-03-28 16:20:41 1039

原创 二分查找 leetcode.33.34

34. 在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。示例 1:nums = [[3,4]示例 2:nums = [[-1,-1]示例 3:[-1,-1]解法:两次二分查找// 两次二分查找,分开查找第一个和最后一个。

2025-03-27 16:41:36 368

原创 字符串 leetcode.5.20.93

小于 4 或大于 12,直接返回空列表,因为合法的 IP 地址长度必须在 4 到 12 之间(每个部分最少 1 位,最多 3 位)。,并检查当前子串的长度是否大于已知的最大长度。,用以表示一个 IP 地址,返回所有可能的。如果子串长度为 3,其数值不能超过 255。已经有 4 个部分,直接返回(剪枝)。"aba" 同样是符合题意的答案。列表临时存储当前分割的四个部分。表示当前处理到字符串的哪个位置。中有 4 个部分时,将。的最后一个子串(回溯)。中最长的 回文 子串。),此时子串一定是回文。

2025-03-27 15:46:02 998

原创 Java Collection 框架全面指南

Java Collection 框架是 Java 中用于存储和操作对象集合的一组接口和类,位于java.util包中。它提供了多种数据结构实现,使开发人员能够高效地处理数据集合。

2025-03-26 17:28:19 196

原创 前缀和 leetcode.724.560.437.1248

前缀和就是把数组中每个位置之前(包括自己)的所有元素的和预先计算并存储起来。这样当我们需要计算任意区间的和时,就可以直接通过简单的减法得到结果,而不需要每次都重新计算。

2025-03-26 16:31:45 1058

原创 滑动窗口 leetcode.209.3.1004.1208

解密后的密码为 [7+1+4, 1+4+5, 4+5+7, 5+7+1]。长度为 minutes 的连续子数组中,老板生气时的顾客数量之和 s1的最大值 maxS1。解密后的密码为 [3+9, 2+3, 4+2, 9+4]。在窗口向右滑动时,设移入窗口的元素下标为 rmodn,则移出窗口的元素下标为 (r−∣k∣)modn。统计窗口内 0 的个数 cnt0​,则问题转换成在 cnt0​≤k 的前提下,窗口大小的最大值。当书店老板生气时,那一分钟的顾客就会不满意,若老板不生气则顾客是满意的。

2025-03-26 15:45:10 1288

原创 并查集leetcode.547.200.684

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。为基础的数据结构,它的基本功能是合并集合中的元素,查找集合中的元素。中间,且这条附加的边不属于树中已存在的边。并查集解决单个问题(添加,合并,查找)的时间复杂度都是O(1)是一组直接或间接相连的城市,组内不含其他没有相连的城市。请找出一条可以删去的边,删除后可使得剩余部分是一个有着。个城市,其中一些彼此相连,另一些没有相连。(水)组成的的二维网格,请你计算网格中岛屿的数量。此外,你可以假设该网格的四条边均被水包围。

2025-03-25 12:36:09 855

原创 单调栈 leetcode.84.85.739.

空间复杂度:O(min(n,U)),其中 U=max(temperatures)−min(temperatures)+1。返回值不计入,仅考虑栈的最大空间消耗。个非负整数,用来表示柱状图中各个柱子的高度。时间复杂度:O(n),其中 n 为 temperatures 的长度。Deque可以替代Stack作为栈,单调栈算法需要频繁的。求在该柱状图中,能够勾勒出来的矩形的最大面积。最大的矩形为图中红色区域,面积为 10。,表示每天的温度,返回一个数组。的最大矩形,并返回其面积。解法一:单调栈(从右至左)

2025-03-25 12:16:43 597

空空如也

空空如也

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

TA关注的人

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