自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣-找到字符串中所有字母异位符

本文解析了LeetCode题目LCR015"找到字符串中所有字母异位词"的滑动窗口解法。核心思路是使用两个哈希数组记录目标字符串p和滑动窗口中字符的频率,通过双指针维护窗口大小:1)右指针扩大窗口时更新字符计数,若字符符合p要求则增加有效计数count;2)当窗口超过p长度时,左指针移动并调整计数;3)当count等于p长度时记录左指针位置。关键细节包括:使用字符-'a'作为哈希索引,后置递减运算符保证正确性比较,以及使用if而非while处理窗口溢出。该算法时间复杂度为O(n),空间复

2025-05-28 22:16:50 861

原创 力扣-将x减到0的最小操作数

【摘要】LeetCode 1658题要求找到将x减至0的最小操作数,通过从数组两端移除元素。正解困难时采用逆向思维:将问题转化为寻找和为sum-x的最长子数组。使用滑动窗口算法,维护窗口和temp,当temp等于目标值时更新最大窗口长度。最终结果为数组长度减去该子数组长度。关键点包括:初始化length为-1处理无解情况,while循环条件left<=right确保正确处理边界。该方法通过逆向转换将复杂问题简化,时间复杂度为O(n)。

2025-05-23 22:30:15 607

原创 力扣-最大连续一的个数

left和right,让他们都。

2025-05-23 21:56:27 766

原创 力扣-无重复字符的最长子串

把left到right之间的元素都存入HashSet中,如果发现HashSet中已经包含了right下标的元素,就把left指针移动到重复元素的位置。同时,

2025-05-22 22:24:40 638

原创 力扣-长度最小的子数组

LCR008题目要求找到数组中元素和大于等于目标值的最短子数组长度。解题思路采用滑动窗口技术,通过双指针(left和right)遍历数组。right指针用于扩展窗口,计算当前窗口内元素的和;当和达到或超过目标值时,记录窗口长度并移动left指针缩小窗口,直到和小于目标值。重复此过程,直到right指针遍历完数组,期间不断更新最小窗口长度。代码实现中,length初始值设为Integer.MAX_VALUE,确保能正确更新最小长度。若未找到符合条件的子数组,则返回0。这种方法通过同向移动的双指针,高效地解决了

2025-05-22 21:15:23 679

原创 力扣-三数之和

题目LCR007.三数之和要求找出数组中所有不重复的三元组,使得它们的和为零。解题思路采用双指针结合定数指针的方法。首先对数组进行排序,然后固定一个指针在数组末尾,使用另外两个指针在剩余数组中进行遍历。根据三数之和与零的比较结果,移动指针以寻找满足条件的三元组。为了去重,使用Set存储三元组,最后将Set转换为List返回。代码中,通过Arrays.asList创建动态三元组,并在找到满足条件的三元组后,同时移动双指针以寻找下一个可能的三元组。这种方法有效利用了数组的单调性,提高了查找效率。

2025-05-21 21:54:55 399

原创 力扣-两数之和

题目LCR006要求在一个有序数组中找到两个数,使它们的和等于目标值。解题思路采用双指针法,定义左指针left指向数组起始位置,右指针right指向数组末尾。通过比较numbers[left] + numbers[right]与target的大小关系,移动指针:若和大于目标值,则右指针左移;若和小于目标值,则左指针右移;若和等于目标值,则返回两指针的索引。该方法利用数组的有序性,时间复杂度为O(n),空间复杂度为O(1)。

2025-05-21 21:24:21 373

原创 力扣-有效三角形的个数

本文介绍了如何解决LeetCode上的611题“有效三角形的个数”。首先,通过排序数组确保边长有序,简化三角形形成条件为a + b > c。接着,使用双指针和定数的方法,通过移动指针来统计满足条件的三角形数量。具体步骤包括:定义定数temp指向数组末尾,使用left和right指针遍历数组,根据nums[left] + nums[right]与nums[temp]的关系移动指针并累加有效三角形数量。最后,代码细节强调了排序的重要性以及指针和定数的正确使用。通过这种方法,可以高效地计算出数组中有效三角形

2025-05-21 20:54:31 647

原创 力扣-盛最多水的容器

题目“盛最多水的容器”要求找到两条垂直线,使得它们与x轴围成的容器能盛最多的水。容器的储水量由两条线之间的距离和较短线的高度决定。解题思路是使用双指针法,一个指针从数组的起始位置开始,另一个从末尾开始。通过比较两个指针所指的高度,移动较短边的指针,因为移动较长边的指针不会增加储水量。每次移动后计算当前容器的储水量,并更新最大储水量。最终,当两个指针相遇时,遍历结束,返回最大储水量。这种方法利用了数学的单调性判断,确保每次移动都能有效寻找更大的储水量。

2025-05-20 21:16:49 706

原创 力扣-快乐数

《快乐数》问题要求判断一个正整数是否为快乐数,即通过不断将数字替换为它每个位置数字的平方和,最终是否能得到1。题目分析指出,数字经过此操作后只有两种结果:陷入1的循环或陷入其他循环。通过类比链表带环问题,可以使用快慢指针法解决。快指针每次移动两步,慢指针每次移动一步,若两者相遇,则判断相遇点是否为1。代码实现中,快指针提前一步移动以加速相遇,且确保指针逻辑正确,避免固定值导致无限循环。最终,若相遇点为1,则为快乐数,否则不是。

2025-05-20 20:40:07 647

原创 力扣网-复写零

本文介绍了力扣(LeetCode)上第1089题“复写零”的解题方法。题目要求在原数组中复写所有的零,同时保持数组长度不变。解题思路采用双指针算法,首先通过嵌套双指针找到起始位置,处理特殊情况如数组倒数第二个元素为零时可能导致的越界问题。然后,从后往前遍历数组,根据当前元素是否为零进行相应的复写操作。通过巧妙地使用指针移动和赋值操作,确保在不覆盖原有数据的情况下完成复写任务。该方法有效避免了从前往后遍历时可能出现的覆盖问题,确保了算法的正确性和效率。

2025-05-19 22:00:42 523

原创 力扣-283-移动零

题目“移动零”要求将数组中的所有零元素移动到数组的末尾,同时保持非零元素的相对顺序。解题思路采用双指针法,定义两个指针dest和cur,其中dest初始值为-1,表示非零区间的右边界,cur从0开始遍历数组。在遍历过程中,当cur指向的元素非零时,将其与dest+1位置的元素交换,并更新dest和cur的位置。最终,数组被划分为非零区间[0, dest]和零区间[dest+1, nums.length-1],满足题目要求。该题思想与快速排序类似,通过0作为临界值进行数组划分。

2025-05-17 22:01:39 505

原创 生产者消费者模型

生产者消费者模型是一种,虽不在常见的23种设计模式中,但在面试中常被考察其实现方式(如)和应用场景(如消息队列、线程池工作队列)。:通过缓冲区实现生产者和消费者的解耦,平衡两者的处理速度差异,避免直接通信带来的紧耦合问题。

2025-05-14 11:52:12 407

原创 Get和Post的区别

GET和POST是 HTTP 协议中两种常用的请求方法,主要用于客户端与服务器之间的数据传输。在面试中常会被问到,Get和Post的区别,下面就来详细介绍一下。

2025-05-08 10:30:03 1018

原创 数据库中的锁

在数据库中,锁是一种用于控制并发访问的机制,主要作用是保证数据的一致性和完整性,避免多个事务同时对同一数据进行操作而产生数据冲突。

2025-05-08 09:13:04 503

原创 MVCC机制

MVCC 是多版本并发控制机制,通过为数据行维护多个版本,让读写操作在并发时互不阻塞。

2025-05-07 10:22:38 1078

原创 详解Redis

首先,什么是Redis?Redis(Remote Dictionary Server)是一个开源的、高性能的,常被用作缓存、消息队列、分布式锁等。

2025-05-07 08:47:30 700

原创 xshell中上传文件显示rz waiting to receive.

小编使用xshell上传文件到linux虚拟机的时候,一直显示rz waiting to receive.和"上传失败",

2025-04-24 19:43:16 256

原创 泛型T和object

在使用泛型的过程中,我发现了无论是T还是object好像都可以表示一切对象,那么他们到底有什么区别呢?T本身没有含义,在代码编译时会被转成object类型,T只是一个占位符,谨慎使用object,优先试用泛型T。

2025-04-23 16:28:41 463

原创 遇到一个慢sql语句,你会怎么办?

如果你当前遇到了一个慢sql语句,你会怎么办?

2025-04-23 08:53:19 306

原创 详解JVM的底层原理

JVM(Java虚拟机)是Java程序运行的核心环境,它实现了Java“一次编写,到处运行”的跨平台特性。

2025-04-17 10:37:49 1163

原创 Gson、Fastjson 和 Jackson 对比解析

Gson、Fastjson 和 Jackson这三种都是Java生态中广泛使用的JSON处理库,用于实现Java对象与JSON数据之间的相互转换。

2025-04-11 19:48:24 1091

原创 Java 中常见的数据结构

Java 集合框架提供了丰富的数据结构实现,以下我会介绍几种最常用的数据结构及其特性

2025-04-11 17:58:27 1144

原创 XML、JSON 和 Protocol Buffers (protobuf) 对比

XML、JSON 和 Protocol Buffers (protobuf)这三种都是常用的数据交换格式,各有特点和适用场景。 接下来我会详细介绍这三种数据交换格式并对比其优缺点。

2025-04-11 17:55:54 543

原创 TCP的三次握手和四次挥手

三次握手的目的是确保双方通信能力正常,并同步初始序列号(ISN),防止历史重复连接干扰。四次挥手的目的是双方独立关闭双向通道,确保数据完整传输后再释放连接。

2025-04-09 18:12:25 822

原创 数据库中的事务

MySQL 中的事务(Transaction)是一组原子性的 SQL 操作,要么全部执行成功,要么全部失败回滚,保证数据库从一个一致状态转换到另一个一致状态。

2025-04-09 17:29:22 938

原创 构建一个最简单的UDP服务器和客户端并逐行解析

在 Java 网络编程中,**客户端(Client)服务器(Server)**是两个核心角色,它们共同构成了网络通信的基本模型(即以下我会构建一个最简单的服务器和客户端的代码。

2025-04-07 11:51:09 1118

原创 TCP/IP五层协议

TCP/IP 五层协议模型是为了教学和理论分析而提出的分层框架,它结合了 TCP/IP 四层模型的实用性和 OSI 七层模型的细节性,更清晰地描述数据从应用程序到物理介质的完整传输过程。

2025-04-06 11:17:13 1067

原创 多线程下使用哈希表

HashMap本身是不安全的,所以要在多线程下使用哈希表,我们可以使用:• Hashtable• ConcurrentHashMapHashtable 是 Java 早期提供的线程安全哈希表实现(),通过 全局锁(synchronized) 保证线程安全。简单来说,HashTable就是简单地把方法加上了synchronized关键字。这等于是直接对HashTable对象本身加锁。但是HashTable的性能较低

2025-04-06 08:47:18 747

原创 详解七大排序

在数据结构中,排序是组织和处理数据的核心操作之一。它不仅是数据组织的核心手段,更是提升计算效率、优化资源利用的基础。其应用贯穿于数据库、操作系统、机器学习、实时系统等领域,是算法设计与系统优化的基石。

2025-04-05 22:00:55 1392 1

原创 堆与二叉树的关系

堆本质上是通过完全二叉树的结构约束和节点值的顺序约束实现的特殊数据结构。其数组存储方式和高效调整算法(heapify)的结合,使得堆在需要快速获取极值的场景中表现出色。理解堆与二叉树的关系,有助于掌握优先队列、堆排序等核心算法,并为学习更复杂的树结构(如AVL树、B树)奠定基础。

2025-04-05 15:18:46 872

原创 普通类、抽象类和接口的区别

Java 8+注意:接口现在可以有默认方法实现,这使得接口和抽象类的界限变得模糊。通常建议优先使用接口,除非需要非静态、非final的成员变量或需要控制子类构造过程时才用抽象类。

2025-04-05 10:52:03 553

原创 CAS: Compare-And-Swap(比较并交换)

CAS 操作包含三个参数:内存地址(V)、旧的预期值(A)以及新值(B)。仅当内存地址 V 处的值和旧的预期值 A 相同时,才会把该地址处的值更新为新值 B。ABA 问题指的是,在CAS 操作期间,内存地址 V 处的值先从 A 变成 B,之后又从 B 变回 A。这时,CAS 操作会认为值没有发生变化,从而继续执行更新操作,但实际上值已经经历了改变。

2025-04-04 18:21:10 665

原创 多线程编程中的锁策略

锁策略(Locking Strategies)是多线程编程中用于控制并发访问共享资源的核心机制。不同的锁策略在等方面有显著差异。

2025-04-04 11:51:21 902

原创 多线程中run方法和start方法的异同

在多线程编程中,run() 和 start() 是两种完全不同的方法,它们的核心区别在于 线程的启动和执行方式。

2025-04-04 10:19:27 344

原创 详解线程池的创建

线程池(ThreadPool)是一种多线程处理方式,它预先创建了一组线程并管理它们的生命周期,用于处理提交的任务。

2025-04-03 11:27:37 908

原创 数据库中的索引

数据库中的索引是一种数据结构,类似于书籍的目录,旨在提高查询效率。

2025-04-03 08:33:38 386

原创 详细分析单例模式

单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点。单例模式常用于管理共享资源(如数据库连接池、线程池、配置对象等)。其中的设计模式指的是,是面向对象编程的经验总结。它们分为和三大类。简要说就是类似于框架,是大佬们提供的可供使用的一种“公式”。

2025-04-02 20:53:47 1018

原创 力扣-203. 移除链表元素

给你一个链表的头节点head和一个整数val,请你删除链表中所有满足的节点,并返回。

2025-03-31 17:46:12 201

原创 牛客-mari和shiny

因为题中给出了n的取值范围:[0,300000],所以int类型是无法定义的.需要改用long类型来定义。

2025-03-29 09:11:26 678

空空如也

空空如也

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

TA关注的人

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