自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode热题100(Java)(7)链表(下)

每一轮内部,通过前驱指针与当前指针的配合,依次处理所有相邻的子链表对:先从当前位置切出指定步长的左子链表并获得右子链表起点,再从该起点切出同等长度的右子链表并获得下一对的起始位置,接着将左右两部分合并后接回主链表,最后将前驱指针移至已合并段的末尾,为下一次拼接做准备。再次遍历原链表,对每个原节点 cur,通过 map.get(cur) 获取其对应的新节点,然后利用 map.get(cur.next) 和 map.get(cur.random) 直接获取新节点的 next 与 random 指向的目标。

2026-08-12 13:11:46 240

原创 LeetCode热题100(Java)(7)链表(上)

本文总结了力扣(LeetCode)中链表相关的8道经典题目及解题思路: 相交链表:通过计算长度差同步遍历找到交点; 反转链表:迭代或递归方式反转指针方向; 回文链表:反转后半段后与前半段比较; 环形链表:快慢指针检测环的存在; 环形链表II:通过数学推导定位环入口; 合并有序链表:双指针遍历合并,使用哨兵节点简化操作; 两数相加:模拟竖式加法处理进位; 删除倒数第N个节点:两次遍历或快慢指针定位目标节点。 所有解法均注重时间空间效率,多数达到O(n)时间复杂度和O(1)空间复杂度。关键技巧包括双指针、哨兵节

2026-07-30 12:45:16 206 2

原创 LeetCode热题100(Java)(6)矩阵

如图所示,第一张为原数组,由于第一行有0,所以我们要用一个常量标记第一行,最终要全部置为0,然后将中间位置的0分别将其对应的行列的第一个位置标为0,这样在遍历行的时候,把行对应的所有列标记为0,遍历列的时候,把列对应的所有行标记为0,最后再看常量是否标记第一行和第一列,即可完成整个矩阵的置零操作。当然,我们可以对其进行优化,创建两个数组,在遍历原矩阵的过程中,分别将遍历到的0位置的横纵坐标分别存入对应数组中,由于可能会有相同的横纵坐标,所以我们这里用HashSet去重,可以适当的优化时间效率。

2026-04-29 23:20:39 613 1

原创 LeetCode热题100(Java)(5)普通数组

我们同样可以尝试优化我们的空间复杂度,思路如下,我们不需要引入额外的两个累乘数组,而是直接将本位置左边累乘的结果存到结果数组中,第二遍循环,逆着更新结果数组的值即可(定义一个常数变量,记录从右边开始累乘的值,依次乘到结果数组中去),这样就可以将空间复杂度优化到O(1)。实现代码可以优化,因为每次将新的数组加入优先级队列的时候,都会产生额外的开销,可以考虑直接将优先级队列中的元素一个个取出来加添加到结果中,每次判定取出来的元素和前一个元素是否有重合部分,如果有的话,就更新前一个结果;空间复杂度:O(n)

2026-04-29 01:05:31 411 1

原创 LeetCode热题100(Java)(4)子串

要在一个数组中找出每个固定长度滑动窗口的最大值,只需维护当前窗口的最大值,并在窗口滑动时根据移出和移入的元素情况决定是否需要重新计算。为消除重新扫描窗口的开销,可以用双端队列维护窗口内可能成为最大值的元素索引,队列内元素对应的值保持严格递减,这样每次最大值就是队头元素,且每个元素最多进出队列一次,实现线性时间复杂度。记录当前窗口最大值:当遍历到的索引 i ≥ k - 1 时,窗口形成,队头索引对应的元素即为当前窗口的最大值,存入结果数组。反复推进窗口,直到右指针越界,最终返回记录的结果数组。

2026-04-27 23:44:26 425 1

原创 LeetCode热题100(Java)(3)滑动窗口

如果该字符的计数超过 1,说明这个字符在窗口内重复了(由于只有新加入的字符可能造成重复),此时就不断右移左指针 l,并把离开窗口的字符计数减 1,直到该重复字符的计数降回 1,窗口重新成为无重复子串。要在一个字符串中找出最长的不含重复字符的子串,只需维护一个内部无重复的“窗口”,在遍历过程中不断扩展并调整这个窗口,同时记录它曾经达到的最大长度。要在字符串 s 中找出所有与 p 互为字母异位词的子串的起始索引,只需用固定大小的滑动窗口在 s 上移动,并比较窗口内字符的频数与 p 的频数是否相同。

2026-04-26 17:37:45 233 1

原创 LeetCode热题100(Java)(2)双指针

对于当前指针所指位置,哪边的高度更小,就处理哪边:若当前高度大于等于对应侧的最大值,则更新最大值;如图所示,只需先统计红色圈起来的“金字塔区域的全部方块”,再减去黑色方块,得到的就是最终所需要的水量,我们将增减放到同一个循环中就可以简写为water += leftMax(rightMax) - height[i];由于要将所有零移动到数组末尾并保持非零元素的相对顺序,只需使用双指针:一个指针 zero 用于定位零的位置,另一个指针 z 用于寻找其后第一个非零元素,找到后交换,重复该过程直到数组末尾。

2026-04-25 21:19:31 579 1

原创 LeetCode热题100 (Java)(1)哈希

computeIfAbsent方法会先查找是否有key,若有则获得其value(顺序表),若没有就添加key到map中,并通过后面的计算函数得到一个value存入map中作为新添加的key的值(此处为一个空顺序表),再通过add方法将对应的字符串添加其中。map.values()的返回值是一个Collection,而不是List,所以不可以直接返回,而ArrayList的构造器可以接受Collection,所以可以构造成ArrayList再返回。由于需要返回下标,我们可以用哈希表来表示一个元素的值和下标。

2026-04-25 01:03:00 380 1

原创 判断质数(Java版)

这篇文章介绍两种简单的判断质数的方法。

2026-04-11 23:26:33 462 2

原创 TCP/IP协议

交换机只有前两层(物理层,数据链路层),路由器只有前三层(物理层,数据链路层,网络层)最主要的协议是以太网,wifi,802.11无线局域网,5G信号等。1.物理层:网络通信中依赖的硬件设备,如网线,光纤等。调用的时候只能上层调用下层,下层给上层提供服务。UDP:无连接,不可靠传输,面向数据包,全双工。将上述的数据转换成电磁波,通过物理介质传播出去。协议号:标识发送数据和接收数据双方的数据格式。2.数据链路层:负责相邻节点之间的网络通信。TCP:有连接,可靠传输,面向字节流,全双工。

2026-01-13 22:43:33 475

原创 数据库事务

为什么要用到事务,我们来看一个例子,假如张三要给李四转100元,这个过程涉及两个语句,一是张三的账户要减少100元,二是李四的账户要增加100元。如果在第一条语句发生后,出现某种故障,第二条语句执行失败了,那么张三的账户会扣款,李四的账户余额不会增加,就会造成错误。此时就要用事务将这两条语句打包起来,让两者同时执行成功或者执行失败。

2025-11-08 00:27:00 500

原创 数据库索引

由于查询操作的频率远远高于增删改的频率,所以就需要使用索引来提高增删改查的效率索引是数据库中重要的数据结构,能够加快查询的速度,但是需要消耗额外的储存,而且在增删改的过程中也可能会额外产生开销。

2025-11-05 15:23:40 1143 2

原创 数据结构 二叉树(Java)

树是一种非线性的数据结构二叉树的节点中储存值,左节点和右节点,通过节点来构成一颗完整的二叉树。

2025-11-03 01:27:17 791 1

原创 数据库设计三大范式

数据库表的每⼀列都是不可分割的原子数据项,而不能是集合,数组,对象等非原子数据通俗的来讲,就是数据库中的每项数据都不可再分(实际应用上的“不可再分”,例如datetime其实可以再分成年月日时分秒,但是这个是一项基本数据类型,因为很多应用场景,这个数据都可以独立存在使用,而不用拆分,那么就可以看作“不可再分”)下面举一组例子。

2025-10-13 23:20:59 315 1

原创 数据库约束

约束就是对数据内容作出限制;创建表的时候,确定出来,跟随建表语句,一起被设置到数据库服务器中。

2025-10-13 18:52:26 339 1

原创 MYSQL的增删改查操作

例:count(*)不能写作count (*),count后面的空格会导致count被识别为列名,(*)被识别为别名,引发歧义。count([dietinct] expr)返回行数,某个列查询会忽略空值,若count(*),则会包括空值;表名后面的小括号当中的列名如果省略掉,表示自动将所有列都列出来了,并且列的顺序和建表时的顺序一致。按照order by 后面的列名排序,默认为升序(也可添加asc),列名后加desc就为降序排序。表示同时查学生的名字以及语文数学成绩的总和,表达式不会影响数据库内的数据。

2025-09-29 20:26:24 1271 1

原创 Java SE 类和对象

在Java中定义类时需要⽤到class关键字field;// 字段(属性) 或者 成员变量method;// ⾏为 或者 成员⽅法class为定义类的关键字,ClassName为类的名字,{}中为类的主体,类中包含类的成员变量和类的成员方法。类的成员之前要加访问修饰符,例如public,一个学生类的定义如下所示注意事项:⼀般⼀个⽂件当中只定义⼀个类public修饰的类必须要和⽂件名相同在⽂件的最上⽅加上⼀个 package 语句指定该代码在哪个包中.包名需要尽量指定成唯⼀的名字.

2025-06-03 18:46:18 715

原创 C++中STL之string的简单介绍和使用

是 C++ 标准模板库(STL)中的一个类,用于表示和操作字符串。它封装了动态大小的字符数组,并提供了丰富的成员函数和操作符来方便字符串的处理,下面将进行一些简单功能的介绍。

2025-05-13 13:48:46 1829

原创 Java SE 运算符

&若有一个表达式为false,则结果为false,所以当第一个值为假时,会跳过第二个表达式,如下所示,我们知道1/0会报错,没报错说明没有进行后面表达式的运算。与C语言不同的是,Java中的%还可以对浮点型进行操作,不会报错,但是一般来说没有意义,一般都是对整形进行操作的。位运算符主要有四个: & ,| ,~, ^,不做介绍,移位运算<<,>>也不做介绍,与C语言不同的是,Java有。包括&&(逻辑与),||(逻辑或),!,其计算结果是 true 或者 false,与C语言类似,不做介绍。

2025-05-11 21:48:33 532

原创 C++中STL之vector的简单介绍和使用

我们先创建一个Person类public:Age = num;Name = str;int Age;与上面存放int类似,我们存放Person类型it!= v2.end();it++)cout << "年龄" << (*it).Age << " " << "姓名" << (*it).Name << endl;cout << "年龄" << it->Age << " " << "姓名" << it->Name << endl;

2025-04-19 10:24:21 788

原创 C++中模版的简单理解(0基础入门)

C++模板是C++中一种强大的编程机制,,它允许程序员编写独立于具体数据类型的代码,从而提高代码的复用性和灵活性。模板可以分为函数模板和类模板。我们可以写一个很简单的函数实现a和b数值的交换,但是仅限于整型,如果我们要处理浮点型数据,我们还需要再创建一个如果我们要交换其他的数据又要重新创建函数,那有没有一种方法可以一劳永逸呢,有的,兄弟,有的,他就是当今t0.5强度的模版template(玩梗勿怪)

2025-04-14 00:06:52 662

原创 C++中多态的简单理解(0基础入门)

多态分为两种主要类型:编译时多态(静态多态)和运行时多态(动态多态)。在C++中,静态多态一般由函数或运算符重载实现,动态多态通常通过虚函数和继承来实现。我们今天主要探讨的是动态多态。多态允许使用一个统一的接口来处理不同类型的对象,从而提高代码的可扩展性和可维护性。直接介绍略显抽象,不妨我们先来看看怎么实现,再介绍它的好处。

2025-04-11 00:57:18 1283

原创 C++中继承的简单理解(0基础入门)

在C++中,继承是一种面向对象编程的重要机制,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。例如,有一个人的基类,而教师,学生,医生等都具有人的属性,可以继承人的成员,来提高代码的复用性,避免代码冗余。

2025-04-10 00:07:05 1094

原创 函数调用运算符重载(仿函数)基础知识

可以被重载,使得一个对象可以像函数一样被调用。这种特性通常用于实现“仿函数”或“可调用对象”。,你可以为类的对象提供类似函数的行为。在C++中,函数调用运算符(在类中进行函数调用运算符。

2025-04-08 15:29:50 205

空空如也

空空如也

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

TA关注的人

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