自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【leetcode题解】算法练习

解法:用两个栈来模拟(细节:字符串这个栈中,先放入一个空串)策略一:计算当前元素后面,有多少元素的两倍比我小(降序)策略二:计算当前元素之前,有多少元素的一半比我大(升序)左右部分的下标已被重新排序,下标已经不是原来的下标了。解法:利用栈进行模拟(直接用数组就可以模拟栈结构)策略:当前元素的后面,有多少个比较小(降序)1. 左半部分的个数+右半部分的个数+策略一:找出该数之前,有多少个数比我大。策略二:找出该数之后,有多少个数比我小。,如果是降序,会有元素被重复统计。,如果是升序,会有元素被重复统计。

2025-04-21 21:22:53 131

原创 【leetcode题解】滑动窗口

2. left与right指针的移动 -> 移动的步长是单词的长度 -> len。出窗口:出去前->hash2[out]<=hash1[out]->count--转化:找出一个最长的子数组的长度,子数组中不超过两种类型的水果(两“种”数)进窗口:进入后->hash2[in]<=hash1[in]->count++利用单调性,使用“同向双指针”(滑动窗口)来优化暴力解法(O(n))解法一:暴力枚举+哈希表(判断字符是否重复出现)O(解法:滑动窗口+哈希表(用于统计)解法:滑动窗口+哈希表。

2025-04-21 21:20:14 200

原创 【数据库】事务

事务保证数据安全,索引提升查询效率事务把一组SQL语句打包成一个整体,在这组SQL执行过程中,要么全部成功,要么全部失败,这组SQL语句可以是一条也可以是多条。不同的客户端对同一张表进行数据修改时可能出现相互影响的情况,为了保证不同事物之间在执行过程中不受影响,事物之间需要进行隔离,这种特性称为隔离性。

2025-04-20 18:48:33 302

原创 【数据库】索引

在.ibd(innodb存储引擎后生成的表空间文件后缀是.ibd)文件中最重要的结构体就是Page(页),页是内存与磁盘交互的最小单元,默认大小为16KB,每次内存与磁盘的交互至少读取一页,所以在磁盘中每个页内部的地址都是连续的,这样做是因为在使用数据的过程中,根据局部性原理,将来要使用的数据大概率与当前访问的数据在空间上是邻近的,所以一次从磁盘中读取一页的数据放入内存中,当下次查询的数据还在这个页中时就可以从内存中直接读取,从而减少磁盘I/O提高性能。与普通索引类似,区别在于唯一索引的列不允许有重复值。

2025-04-20 14:49:27 669

原创 【leetcode题解】递归

本质:主问题->相同的子问题 子问题->相同的子问题。实现快速幂:1. 递归 2. 循环(二进制)递归就是函数自己调用自己(二叉树的遍历、快排、归并)仅需做一次深度优先遍历 后序遍历。的展开图,就是对一棵树进行一次。第一种视角:从宏观角度看待问题。第二种视角:将链表看作一棵树。中序遍历:只存在于二叉树中。解法:递归(重复的子问题)视角:宏观角度看待递归。

2025-03-26 10:55:10 555

原创 【leetcode题解】记忆化搜索

解法二:记忆化搜索 - 递归过程中将相同问题结果放入备忘录(带备忘录的递归)<可变参数,返回值>——用数组模拟哈希表(数组下标,nums[i])递归每次返回的时候,将结果放入备忘录。在每次进入递归的时候,在备忘录中查找。解法三:记忆化搜索->动态规划。解法三:记忆化搜索->动态规划。解法一:递归(时空复杂度大)解法一:暴搜(递归)——超时。解法二:暴搜->记忆化搜索。

2025-03-26 10:50:50 396

原创 【leetcode题解】优先级队列

1046. 最后一块石头的重量 - 力扣(LeetCode)解法一:暴力模拟(我自己的解法)return 0;解法二:大根堆模拟// 创建大根堆// 把所有石头放入堆中// 模拟。

2025-03-24 09:39:32 326

原创 【leetcode题解】链表

2. 把后面的部分逆序(反转链表:双指针;1. 找到链表的中间节点(快慢双指针)3. 合并两个链表(双指针)合并 K 个升序链表(困难)解法二:循环、迭代(模拟)解法一:暴力解法(不推荐)2. 链表中的常用操作。

2025-03-23 23:48:29 406

原创 【leetcode题解】宽搜(BFS)

相减之后,即使溢出,结果也是正确的(数据存储是环形的,距离不会溢出)即可 Collections.reverse();解法二:利用数组存储二叉树的方式(堆),给节点编号。细节:①用数组来实现队列,这样队头队尾比较好找。解法一:硬补 -> 超时、内存可能不够。解法:利用层序遍历,统计出每一层最大值。在每个树行中找最大值。

2025-03-23 21:00:14 244

原创 【leetcode题解】前缀和

(dp [ i ] 表示[ 1, i ] 区间内所有元素的和,即dp[ i ]=dp[ i - 1 ]+arr[ i ] )前缀和数组:f[ i ]表示[0,i-1]区间所有元素的和,f[ i ]=f[ i - 1 ]+nums[ i - 1 ]后缀和数组:g[ i ]表示[i+1,n-1]区间所有元素的和,g[ i ]=g[ i+1 ]+nums[ i+1 ]dp[ i ] [ j ] 表示:从[1,1]位置到[i , j]位置,这段区间里面所有元素的和。细节:f[0]=0,g[ n-1 ]=0。

2025-03-23 17:07:19 800

原创 【leetcode题解】双指针

1. a+b>c——>right-left个,right--找到一种结果之后,left和right指针要跳过重复元素。双指针算法:利用数组下标来充当指针。找到一种结果之后,不要“停”,缩小区间,继续寻找】使用完一次双指针算法之后,i也要跳过重复元素。:已处理的区间内,非零元素的最后一个位置。解法一:排序+暴力枚举+利用set去重。解法一:排序+暴力枚举+利用set去重。:利用单调性,使用双指针算法解决问题。利用单调性,使用双指针算法解决问题。:从左往右扫描数组,遍历数组。解法二:排序+双指针。

2025-03-23 00:39:03 730

原创 【leetcode题解】哈希表

哈希表是存储数据的容器,为了“快速”查找某个元素(时间复杂度为O(1),空间复杂度为O(n),解法:利用哈希表(使用数组模拟哈希表【仅需开辟2个哈希表,26个字符空间即可】)模拟简易哈希表(字符串中的“字符”;数据范围很小的时候)2. 如何分组<string,string[ ]>1. 判断两个字符串是否是字母异位词(排序)哈希表:1. 容器 2. 用。解法二:使用哈希表来做优化。的查找某个数时进行使用。解法一:利用排序函数。

2025-03-23 00:27:10 416

原创 【leetcode题解】位运算

:有0即0 |:有1即1 ^:相同为0,相异为1/无进位相加。解法二:高斯求和 return (5+1)(0+5)/2-sum。2. 给一个数n,确定它的二进制表示中的第x位是0还是1。解法一:哈希表(时空复杂度均为O(n))hash[26]将最右侧的1转为0,右边区域(包含1)全部取反。3. 将一个数n的二进制表示的第x位修改成1。4. 将一个数n的二进制表示的第x位修改成0。5. 提取一个数(n)二进制表示中最右侧的1。6. 干掉一个数(n)二进制表示中最右侧的1。

2025-03-23 00:20:28 865

原创 【leetcode题解】二分算法

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)解法一:暴力查找解法二:朴素二分查找区间左端点解题思路x<t时left=mid+1x≥t时right=mid查找区间左端点细节处理1. 循环条件为left<right,而不是left≤right(left=right的时候,就是最终结果,无需判断,若判断,则死循环)若使用left+(right-left+1)/2则死循环查找区间右端点解题思路x<t时left=midx≥t时right=mid-1查找区间右端点。

2025-03-22 19:21:46 1043

原创 【leetcode题解】贪心算法

在考虑最长递增子序列的“长度”的时候,不需要关心这个序列是什么样子,仅需关心“最后一个元素”是谁。解法一:动态规划 - 利用dp找到数组中最长递增子序列的长度,判断是否大于等于3即可。1. 前期学习的时候,把重点放在贪心的策略上,把这个策略当成经验吸收。本题的排序(优化):把数转化成字符串,然后拼接字符串,比较字典序。正常的排序本质(升序):确定元素的先后顺序,谁在前,谁在后。解法一:暴力解法->递归->记忆化搜索->动态规划(麻烦)净收益:diff = [-2,-2,-2,3,3]

2025-03-22 19:16:49 829

原创 【leetcode题解】二叉树中的DFS

深度优先遍历(DFS),是我们树或者图这样的数据结构中常用的一种遍历算法。这个算法会尽可能深的搜索树或者图的分支,直到一条路径上的所有结点都能被遍历完毕,然后回溯到上一层,继续找一条路遍历。在二叉树中,常见的深度优先遍历为:前序遍历、中序遍历、后序遍历因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅易理解而且代码简洁,并且前中后序三种遍历的唯一区别就是访问根节点的时机不同。本质就是。

2025-03-17 22:46:17 779

原创 【leetcode题解】模拟算法

比葫芦画瓢。思路较简单,考察代码能力。1. 模拟算法流程,一定要在演草纸上过一遍流程2. 把流程转化为代码。

2025-03-15 20:54:50 334

原创 【leetcode题解】线性dp

【线性dp】

2025-03-15 16:10:08 981

原创 【数据结构】哈希表Map&&Set

Map.Entry<k,v>是Map内部实现的用来存放<key,value>键值对映射关系的内部类,该内部类中主要提供了<key,value>的获取,value的设置以及key的比较方式。对于n个节点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是节点在二叉搜索树的深度的函数,即节点越深,比较次数越多。由于哈希表底层数组的容量往往是小于实际要存储的关键字的数量的,因此冲突的发生是必然的,我们能做的就是降低冲突率。Set中的key不能修改,如果要修改,先将原来的删除掉,然后重新插入。

2025-03-13 00:02:34 938

原创 MySQL

> age int default 3 ——插入数据时,age列的默认值为3。-> id int primary key, ——主键(不允许为空,不允许重复)准确的小数值,m是数字总个数(符号不算),d是小数点后个数,m最大值为65,d最大值为30.insert into 表名(列名,列名) values(值,值),(值,值),(值,值);insert into 表名(列名,列名) values(值,值);delete from 表名;

2024-11-01 23:56:13 873 1

原创 顺序表专题

数据结构是由“数据”和“结构”两词结合而来什么是数据?常见的数值1、2、3...教务系统里保存的用户信息(姓名、性别、年龄、学历等)、网页里肉眼可见的信息(文字、图片、视频等),这些都是数据什么是结构?当我们想要使用大量使用同一类型的数据时,通过手动定义大量的独立的变量对于程序来说,可读性非常差,我们可以借助数组这样的数据结构将大量的数据组织在一起,结构也可以理解为组织数据的方式想要在草原上找到名叫“咩咩”的羊很难,但是从羊圈里找到1号羊就很简单,羊圈这样的结构有效将羊群组织起来。

2024-11-01 23:55:12 1047

原创 数据库(1)

登录 mysql -uroot -p查看当前的数据库版本 select version();显示所有数据库 show databases;创建数据库 create [if not exists] database 数据库名 character set 字符编码集 collate 排序规则;选择数据库 use 数据库名查看当前数据库 select database();删除数据库 drop [if exists] database 数据库名;//危险操作。

2024-10-10 00:21:35 1052

原创 栈和队列.

循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。队列:只允许在一端进行插入数据操作,另一端进行删除数据操作的特殊线性表。操作的队列,deque是"double ended queue"的简称。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。如果使用单链表来实现栈,可以采用头插法入栈和出栈。出栈:栈的删除操作叫出栈,出数据在栈顶。

2024-09-06 18:52:55 638

原创 LinkedList与链表

但是,这句话只能执行一次,如果下一个还是key,将不会再执行这个if语句,所以要么将这个if改为while循环,要么将这个if放在该方法的最后(即,最后再处理head),执行完以后直接退出,且只针对于head.LinkedList的底层是双向链表结构,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在任意位置插入或删除元素时,不需要搬移元素,效率较高。此时,指针每移动一次,之间的距离就缩小一步,因此,在慢指针走完一圈之前,快指针肯定可以与慢指针相遇。

2024-09-02 22:06:28 778

原创 ArrayList与顺序表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列...线性表在逻辑上是线性结构,也就是说是连续的一条直线,但在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删改查。

2024-08-17 18:11:29 602

原创 JDK17语法新增特性

从springboot3.0开始,已经不支持JDK8了。

2024-08-15 19:25:27 913

原创 数据结构预备知识

Java集合框架又被称为container,是定义在java.util包下的一组接口interfaces和其实现类classes.主要表现为将多个元素element置于一个单元中,用于对这些元素进行快速、便捷的存储store、检索retrieve、管理manipulate,即我们俗称的增删改查CEUD数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。

2024-08-15 17:09:13 820

原创 异常(Java)

if (!throw new NameException("用户名错误异常");throw new PassWordException("密码错误异常");} else {System.out.println("登录成功!");try {PassWordException类:(自定义)public class PassWordException extends RuntimeException {//运行时异常super();

2024-08-07 14:27:17 753

原创 throw和throws的区别

throw是在代码块内的,即在捕获方法内的异常并抛出时用的,throws是针对方法的,即将方法的异常信息抛出去。可以理解为throw是主动(在方法内容里主动捕获并throw),而throws是被动(在方法上是没有捕获异常进行处理,直接throws)每个方法都必须要制定哪些异常不能处理,所以方法的调用者能够确保处理可能发生的异常,多个异常用逗号分隔。throw位于方法内部,可以作为单独语句使用,throws必须跟在方法参数列表后面。throw用在方法实现中,throws用在方法声明中。throw关键字用来。

2024-08-07 13:59:55 269

原创 Django与数据库

Django里面,数据库的操作,包括数据的增删改查,基本都是通过Model类型的对象进行的。定义一张数据库表就是定义一个继承自的类定义该表中的字段(列),就是定义该类里面的一些属性类的方法就是对该表中数据的处理方法,包括数据的增删改查这样,开发者对数据库的访问,从原来的使用底层的sql语句,变成面向对象的开发,通过一系列对象的类定义和方法调用就可以操作数据库。这样做:首先极大地简化了我们应用中的数据库开发,因为无需使用sql语句操作数据库了,提高了开发的效率。其次。

2024-08-05 23:04:08 976

原创 String

String是字符串类型,C语言中没有字符串类型。Java中,没有说 字符串的结尾是"\0"这样的说法C语言之所以有这样的规定,是因为C得用这个字符来判断结尾。

2024-08-03 20:33:14 866

原创 图书管理系统初实现

从三个模块来实现图书管理系统:书本、用户、实现的功能。

2024-08-02 22:18:21 321

原创 抽象类和接口

修饰的。

2024-07-29 21:16:09 808

原创 继承与多态 Java

和继承类似,组合也是一种表达类之间的关系的方式,也能够达到代码重用的效果,组合并没有涉及到特殊的语法(诸如extends这样的关键字),仅仅是将一个类的实例作为另一个类的字段。对于已经投入使用的类,尽量不要进行修改,最好的方法是:重新定义一个新的类,来重复利用其中共性的内容,并且添加或者改动新的内容。动态绑定:也称为后期绑定(晚绑定),即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体调用哪个类的方法。,再执行对象一的父类和子类的实例和构造,最后执行对象二的父类和子类的实例和构造。

2024-07-19 21:11:43 671

原创 Django Web框架

模型层位于Django视图层和数据库之间,进行Python对象和数据库表之间的转换。模型层可以屏蔽不同数据库之间的差异,可以提供很多便捷工具有助于开发。临时性操作使用Django Shell更加方便,小范围Debug更简单,不需要运行整个项目来测试。

2024-07-15 20:54:22 1668

原创 类和对象(Java)

Java是一门纯面向对象的语言,在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来设计程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。1.类名采用大驼峰。2.成员前面统一为public。3.此处写的方法不带static关键字。//定义一个变量class WashMachine {//类->类型//字段、属性、成员变量//在类里面,方法外面//品牌//型号//重量//行为、成员方法。

2024-07-09 15:17:22 798

原创 Python函数装饰器

hi() # 无论何时调用hi(),greet()和welcome()将会被同时调用# greet() # NameError ——greet()和welcome()函数在hi()函数之外不能访问。

2024-06-06 15:56:18 251

原创 数组(java)

null的作用类似于C语言中的NULL(空指针),都是表示一个无效的内存位置,因此不能对这个内存进行任何读写操作,一旦尝试读写,就会抛出NullPointerException。引用变量并不直接存储对象本身,可以简单理解为存储的是对象在堆中空间的起始地址,通过该地址,引用变量可以操作对象。而引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址,引用指向对象,比如一个数组这个引用。基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;

2024-05-30 14:27:59 958

原创 冒泡排序(C语言)

通过对待排序序列从前向后(从下标较小的元素开始),依次对相邻两个元素的值进行两两比较,若发现逆序则交换,使值较大的元素逐渐从前往后移,就像水底下的气泡一样逐渐向上冒。5,7的位置已经确定,只需对前三个元素进行排序即可。,7,5,1 ——2,3相比不交换。,5,1 ——3,7相比不交换。,1 ——7,5相比,设待排序数组为:2,3,7,5,1。——3,5相比不交换。——3,1相比不交换。——2,3相比不交换。第三轮过后,将第三大元素位置确定。——2,3相比不交换。

2024-05-22 11:37:30 551

原创 二进制奇偶位交换

写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

2024-04-20 16:36:16 234 1

空空如也

空空如也

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

TA关注的人

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