自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 删除排序链表中的重复元素--LeetCode

这道题目思路十分清晰,首先创建新的指针来依次遍历,若出现重复,则删除,不同就继续遍历。删除所有重复的元素,使每个元素只出现一次。给定一个已排序的链表的头。

2025-06-19 10:00:00 228

原创 反转链表二--LeetCode

一致,就是多出了反转的范围,我们依旧采用三个指针来记录数据,将pre指针定位到要反转的前一位,只需将指针遍历left-1次,定义cur指针为pre的下一个指针,然后进行right-left次遍历,先将前两个链表进行转换,再将转换后的视为一个整体,继续进行right-left次转换,就可将链表中特定区域进行指针反转。

2025-06-18 19:40:15 406

原创 图书整理--LeetCode

书店店员有一张链表形式的书单,每个节点代表一本书,节点中的值表示书的编号。为更方便整理书架,店员需要将书单倒过来排列,就可以从最后一本书开始整理,逐一将书放回到书架上。请倒序返回这个书单链表。本题主要是将链表进行反转,就可以使用栈的特性-先进后出,那么对于队列而言,只需将链表依次插入队列头部,这个队列就是倒序了,也可以实现栈的特性。输入:head = [3,6,4,1]输出:[1,4,6,3]

2025-06-18 19:15:25 234

原创 Java并发编程

【代码】Java并发编程。

2025-05-27 17:33:44 249

原创 赎金信--LeetCode

的思路相近,相当于求 字符串a 和 字符串b 是否可以相互组成 ,而这道题目是求 字符串a能否组成字符串b,而不用管字符串b 能不能组成字符串a。

2025-05-27 09:00:00 345

原创 有效的字母异位符--LeetCode

从另一个角度考虑,t 是 s 的异位词等价于「两个字符串中字符出现的种类和次数均相等」。由于字符串只包含 26 个小写字母,因此我们可以维护一个长度为 26 的频次数组 table,先遍历记录字符串 s 中字符出现的频次,然后遍历字符串 t,减去 table 中对应的频次,如果出现 table[i]<0,则说明 t 包含一个不在 s 中的额外字符,返回 false 即可。t 是 s 的异位词等价于「两个字符串排序后相等」。此外,如果 s 和 t 的长度不同,t 必然不是 s 的异位词。

2025-05-26 17:37:10 247

原创 环形链表2--LeetCode

slow 指针进入环后,又走了 b 的距离与 fast 相遇,环内剩余距离为c。此时,fast 指针已经走完了环的 n 圈,因此它走过的总距离为 2(a+b) = a + b + n(b+c),化简可得a = (n-1)(b+c)+c,由于n大于等于1,于是先定义为1,此时等式就变为a = c。如果链表中存在环,则 fast 指针最终将再次与 slow 指针在环中相遇。遍历链表,并将链表每一个元素进入哈希集合中,若再次出现,则为环的起始位置。链表中有一个环,其尾部连接到第一个节点。,则在该链表中没有环。

2025-05-26 09:00:00 353

原创 链表相交--LeetCode

如果当前节点在哈希集合中,则后面的节点都在哈希集合中,即从当前节点开始的所有节点都在两个链表的相交部分,因此在链表 headB 中遍历到的第一个在哈希集合中的节点就是两个链表相交的节点,返回该节点。输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 B 中,相交节点前有 1 个节点。

2025-05-25 20:45:40 1072

原创 删除链表的倒数第N个结点--LeetCode

根据栈「先进后出」的原则,我们弹出栈的第 n 个节点就是需要删除的节点,并且目前栈顶的节点就是待删除节点的前驱节点。为了方便删除操作,我们可以从哑节点开始遍历 L−n+1 个节点。当遍历到第 L−n+1 个节点时,它的下一个节点就是我们需要删除的节点,这样我们只需要修改一次指针,就能完成删除操作。随后我们再从头节点开始对链表进行一次遍历,当遍历到第 L−n+1 个节点时,它就是我们需要删除的节点。为了与题目中的 n 保持一致,节点的编号从 1 开始,头节点为编号 1 的节点。个结点,并且返回链表的头结点。

2025-05-25 11:02:05 410

原创 两两交换链表中的节点--LeetCode

用 head 表示原始链表的头节点,新的链表的第二个节点,用 newHead 表示新的链表的头节点,原始链表的第二个节点,则原始链表中的其余节点的头节点是 newHead.next。如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。两两交换链表中的节点之后,新的链表的头节点是 dummyHead.next,返回新的链表的头节点即可。

2025-05-24 20:38:25 664

原创 反转链表--LeetCode

在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。→nk−1→nk→nk+1←…←nm我们希望 nk+1的下一个节点指向 nk。→nk−1→nk →nk+1→…→nm→∅,若从节点 nk+1到 nm已经被反转,而我们正处于 nk。假设链表的其余部分已经被反转,现在应该如何反转它前面的部分?需要注意的是 n1的下一个节点必须指向 ∅。假设链表为 1→2→3→∅,我们想要把它改成 ∅←1←2←3。,请你反转链表,并返回反转后的链表。

2025-05-24 19:42:47 531

原创 设计双向链表--LeetCode

实现 addAtIndex(index, val) 时,如果 index 是有效值,则需要找到原来下标为 index 的节点 succ 和前驱节点 pred,并创建新节点 to_add,再通过各自 prev 和 next 变量的更新来增加to_add。然后找到下标为 index 的节点的前驱节点 pred 和后继节点 succ,再通过各自 prev 和 next 变量的更新来删除节点,来达到删除节点的效果。实现双向链表,即每个节点要存储本身的值,后继节点和前驱节点。以指示链表中的上一个节点。

2025-05-22 18:31:16 377

原创 设计单链表--LeetCode

实现 addAtIndex(index, val) 时,如果 index 是有效值,则需要找到原来下标为 index 的节点的前驱节点 pred,并创建新节点 to_add,将to_add 的后继节点设为 pred 的后继节点,将 pred 的后继节点更新为 to_add,这样就将 to_add 插入到了链表中。然后找到下标为 index 的节点的前驱节点 pred,通过将 pred 的后继节点更新为 pred 的后继节点的后继节点,来达到删除节点的效果。实现单向链表,即每个节点仅存储本身的值和后继节点。

2025-05-21 13:29:41 433

原创 移除链表元素--LeetCode

对于给定的链表,首先对除了头节点 head 以外的节点进行删除操作,然后判断 head 的节点值是否等于给定的 val。如果 temp 的下一个节点不为空且下一个节点的节点值等于给定的 val,则需要删除下一个节点。如果 temp 的下一个节点的节点值不等于给定的 val,则保留下一个节点,将 temp 移动到下一个节点即可。当 temp 的下一个节点为空时,链表遍历结束,此时所有节点值等于 val 的节点都被删除。也可以用迭代的方法删除链表中所有节点值等于特定值的节点。给你一个链表的头节点。

2025-05-20 12:10:31 621

原创 JAVA链表

接下来说一说链表的定义。链表节点的定义,很多同学在面试的时候都写不好。这是因为平时在刷leetcode的时候,链表的节点都默认定义好了,直接用就行了,所以同学们都没有注意到链表的节点是如何定义的。// 单链表int val;// 节点上存储的元素// 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数有同学说了,我不定义构造函数行不行,答案是可以的,C++默认生成一个构造函数。

2025-05-20 09:00:00 618

原创 开发商购买土地

然而,由于城市规划的限制,只允许将区域按横向或纵向划分成两个子区域,而且每个子区域都必须包含一个或多个区块。为了确保公平竞争,你需要找到一种分配方式,使得 A 公司和 B 公司各自的子区域内的土地总价值之差最小。在一个城市区域内,被划分成了n * m个连续的区块,每个区块都拥有不同的权值,代表着其土地价值。目前,有两家开发公司,A 公司和 B 公司,希望购买这个城市区域的土地。现在,需要将这个城市区域的所有区块分配给 A 公司和 B 公司。请输出一个整数,代表两个子区域内土地总价值之间的最小差距。

2025-05-19 12:00:00 354

原创 区间和--LeetCode

第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后的输入为需要计算总和的区间下标:a,b (b > = a),直至文件结束。给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。输出每个指定区间内元素的总和。

2025-05-19 08:00:00 153

原创 螺旋遍历二维数组--LeetCode

提取元素,然后再进入内部一层重复相同的步骤,直到提取完所有元素。:从左上角开始,按照。

2025-05-18 12:17:21 229

原创 螺旋矩阵--LeetCode

如果 left<right 且 top<bottom,则从右到左遍历下侧元素,依次为 (bottom,right−1) 到 (bottom,left+1),以及从下到上遍历左侧元素,依次为 (bottom,left) 到 (top+1,left)。遍历完当前层的元素之后,将 left 和 top 分别增加 1,将 right 和 bottom 分别减少 1,进入下一层继续遍历,直到遍历完所有元素为止。例如,下图矩阵最外层元素都是第 1 层,次外层元素都是第 2 层,剩下的元素都是第 3 层。

2025-05-18 11:32:41 661

原创 Java 算法入门:从基础概念到实战示例

在计算机科学领域,算法如同魔法咒语,能够将无序的数据转化为有价值的信息。对于 Java 开发者而言,掌握算法不仅是提升编程能力的关键,更是解决复杂问题的核心武器。本文将带领你走进 Java 算法的世界,从基础概念入手,结合具体实例,帮助你快速入门。​。

2025-05-01 21:40:07 961

原创 Java初级学者必学内容及学习指南

Java 作为一门广泛应用的编程语言,其基础内容是深入学习和开发的基石。本文将系统梳理 Java 的基础知识点,帮助初学者快速入门,也为有一定经验的开发者提供复习参考。Java 具有诸多显著特性。它是面向对象的语言,将数据和操作封装在对象中,提高了代码的可维护性与可扩展性。同时,Java 是健壮的,异常处理机制让程序在遇到错误时能妥善应对;垃圾自动收集功能减轻了开发者管理内存的负担;强类型机制则保证了数据的安全性和稳定性。

2025-05-01 21:29:14 996

原创 水果成篮--LeetCode

你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。你想要尽可能多地收集水果。你只有 两个篮子,并且每个篮子只能装单一类型的水果。每个篮子能够装的水果总量没有限制。你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组。一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。,返回你可以收集的水果的最大数目。棵树上的水果 种类。

2025-04-26 21:22:59 645

原创 长度最小的子数组--LeetCode

得到前缀和之后,对于每个开始下标 i,可通过二分查找得到大于或等于 i 的最小下标 bound,使得 sums[bound]−sums[i−1]≥s,并更新子数组的最小长度(此时子数组的长度是 bound−(i−1))。初始化子数组的最小长度为无穷大,枚举数组 nums 中的每个下标作为子数组的开始下标,对于每个开始下标 i,需要找到大于或等于 i 的最小下标 j,使得从 nums[i] 到 nums[j] 的元素和大于或等于 s,并更新子数组的最小长度(此时子数组的长度是 j−i+1)。

2025-04-26 20:16:48 768

原创 有序数组的平方--LeetCode

具体地,我们设negative为数组 nums 中负数与非负数的分界线,也就是说,nums[0] 到 nums[neg] 均为负数,而 nums[negative+1] 到 nums[n−1] 均为非负数。当我们将数组 nums 中的数平方后,那么 nums[0] 到 nums[negative] 单调递减,nums[negative+1] 到 nums[n−1] 单调递增。同样地,我们可以使用两个指针分别指向位置 0 和 n−1,每次比较两个指针对应的数,选择较大的那个逆序放入答案并移动指针。

2025-04-25 21:16:59 721

原创 比较含退格的字符串--LeetCode

这样,我们定义两个指针,分别指向两字符串的末尾。每次我们让两指针逆序地遍历两字符串,直到两字符串能够各自确定一个字符,然后将这两个字符进行比较。一个字符是否会被删掉,只取决于该字符后面的退格符,而与该字符前面的退格符无关。具体地,我们定义 skip 表示当前待删除的字符的数量。若该字符为退格符,则我们需要多删除一个普通字符,我们让 skip 加 1;若 skip 不为 0,则说明当前字符需要删去,我们让 skip 减 1。两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回。

2025-04-25 10:00:00 345

原创 移动零--LeetCode

给定一个数组 nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。遍历数组找出等于0的数,再进行向前覆盖操作,结束后,将后面的数遍历成0。请注意,必须在不复制数组的情况下原地对数组进行操作。慢指针表示新数组非0数组的下一个下标。快指针表示寻找非0数组的下标。

2025-04-24 09:44:34 272

原创 删除排序数组中的重复项--LeetCode

给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k,你需要做以下事情确保你的题解可以被通过:更改数组nums,使nums的前k个元素包含唯一元素,并按照它们最初在nums中出现的顺序排列。nums的其余元素与nums的大小不重要。返回k。

2025-04-24 08:32:26 228

原创 移除元素--LeetCode

示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。left在前来判断是否为删除元素,right在后面判断不为删除元素的有哪些。

2025-04-23 19:35:27 300

原创 有效的完全平方数--LeetCode

完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。给你一个正整数num。如果num是一个完全平方数,则返回true,否则返回false。不能使用任何内置的库函数,如sqrt。

2025-04-19 15:00:00 331

原创 x的平方根--LeetCode

给你一个非负整数x,计算并返回x的算术平方根,由于返回类型是整数,结果只保留整数部分,小数部分将被舍去。注意:不允许使用任何内置指数函数和算符,例如pow(x,0.5)或者x**0.5。

2025-04-19 10:00:00 387

原创 在排序数组中查找元素的第一个和最后一个位置--LeetCode

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。

2025-04-18 19:45:47 1465 2

原创 搜索插入位置--LeetCode

在计算二分法的中间值middle时,要使用 i + (j - i) / 2 而不是 (i + j) / 2 是为了避免整数溢出。给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。

2025-04-18 08:54:22 308

原创 二分查找-LeetCode

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

2025-04-17 20:35:30 303

原创 数组理论基础

通过合适的索引,可以快速访问数组中的元素。2. 数组的长度不可变:一旦数组被创建,其长度就不可改变,需要重新创建一个新的数组来改变长度。存储多个相同类型的数据:数组可以存储多个相同类型的数据,方便对数据进行批量操作。快速访问数据:通过索引可以快速访问数组中的元素,提高数据的读取效率。1. 元素:数组中的每个数据项称为元素,每个元素可以通过索引访问。3. 长度:数组中元素的个数,确定了数组的大小。通过索引可以访问数组中的元素,索引从0开始。可以通过索引修改数组中的元素的值。通过循环遍历数组中的所有元素。

2025-04-17 19:44:54 327

原创 蓝桥每日打卡--区间移位

蓝桥#JAVA#区间移位。

2025-03-21 20:55:23 483

原创 蓝桥每日打卡--打家劫舍4

蓝桥#JAVA#4。

2025-03-21 19:40:13 814

原创 蓝桥每日打卡--打家劫舍3

蓝桥#JAVA#3。

2025-03-16 18:40:50 1250

原创 蓝桥每日打卡--打家劫舍2

蓝桥#JAVA#2。

2025-03-16 17:17:36 380

原创 蓝桥每日打卡--查找有序数组中的目标值

蓝桥#JAVA#查找有序数组中的目标值。

2025-03-14 20:37:56 270

原创 蓝桥每日打卡--背包问题

蓝桥#JAVA#背包问题。

2025-03-14 20:35:55 294

空空如也

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

TA关注的人

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