自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 138.随机链表的复制

题目要我们做的操作是将这个链表完整的复制下来,注意,不是将原来的链表原原本本地复制一遍,是新创建一个链表,我们可以借助将链表转换成线性表的思路,实现对链表的复制。指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。这样映射之后,我们可以通过线性表的下标访问到节点的 random 所指向的节点。通过这个映射关系,我们可以将旧链表中的 random 关系复制到新链表中。节点组成,其中每个新节点的值都设为其对应的原节点的值。个节点组成的链表来表示输入/输出中的链表。

2024-05-29 17:48:47 860 1

转载 如何理解关系型数据库的常见设计范式?

首先要明白”范式(NF)”是什么意思。按照教材中的定义,范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。很晦涩吧?实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。就像家里装修买建材,最环保的是E0级,其次是E1级,还有E2级等等。数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。一般在我们设计关系型数据库时,最多只考虑到BCNF就够了。符合高一级范式的设计,必定符合低一级范式,例如符合2NF的关系模式,必定符合1NF。

2024-05-24 17:35:09 34

原创 [已解决]javafx+scene builder中实现多controller之间的通信

我们知道,使用javafx+scene builder实现GUI界面时,一个fxml文件只对应一个界面窗口,也只对应一个controller类,现在我们有了两个窗口:记事本的主界面,实现文本编辑、记事本的查找与替换界面,实现文本的查找与替换,如何实现在主界面中打开查找与替换界面?在javafx中用scene builder实现一个GUI图形化界面,有时候需要实现在一个窗口中点击某个按钮,跳出一个新窗口,该窗口实现另外的功能。这些功能肯定不能都放在同一个模块中,我们需要对这些功能进行分类,放在不同模块中。

2024-05-21 10:40:58 183

原创 leetcode记录

,然后我们再创建另一个哈希表 hash_s 来维护当前字符串 s 中遍历到的子串中的字母及其出现次数。

2024-05-17 18:20:06 551

原创 SpringBoot学习记录(3)

监听器接口:ApplicationContextInitializer、SpringApplicationRunListener、CommandLineRunner、ApplicationRunner。SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、bean加载情况、配置属性、日志信息等。监听器:Listener,实现java.util.EventListener对象。事件:Event,继承java.util.EventObject类的对象。

2024-05-13 22:23:04 505

原创 SpringBoot学习记录(2)

定义条件类:自定义类实现Condition接口,重写matches方法,在matches方法中进行逻辑判断,返回boolean值。

2024-05-12 20:51:16 924

原创 SpringBoot学习记录(1)

的话,可以使用**application.properties或者application.yml(application.yaml)**进行配置。:SpringBoot的自动配置是一个运行时(准确来说是程序启动时)的过程,这些过程均由SpringBoot自动完成。yaml是一种直观的能被电脑识别的数据序列化格式,并容易理解阅读。:提供一些大型项目中的非功能性特性,如嵌入式服务器、安全、指标等。:将具备某种功能的坐标打包到一起,并提供一些默认的功能。SpringBoot是基于约定的,

2024-05-09 22:43:23 376

原创 spring框架学习记录(3)

事务作用:在数据层保障一系列的数据库操作同成功同失败Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功或同失败。

2024-05-05 20:08:18 241

原创 spring框架学习记录(2)

使用@Component定义bean@Component核心配置文件中通过组件扫描加载beanString提供@Component注解的三个衍生注解@Controller:用于表现层bean定义@Service:用于业务层bean定义@Repository:用于数据层bean定义@Repository("bookDao") // 数据层的bean@Service // 业务层的beanAOP:面向切面编程,一种编程范式,指导开发者如何组织程序结构作用:在不改变原始设计的基础上为其进行功能增强。

2024-05-04 22:48:19 1129

原创 spring框架学习记录(1)

前半个月一直在应付期中考试,快被折磨似了折磨似orz。

2024-05-03 22:17:50 1211 3

原创 leetcode

个元素开始,每次将一个元素压入队列,此时的滑动窗口超出了其承载量(多了一个元素),于是我们可以对队顶元素进行判断,看他是否在当前滑动窗口中(,所以我们可以先将数组中前 k 个元素压入优先队列中,记录一次队顶元素(当前滑动窗口的最大值)。考虑到这个题滑动窗口的操作过程,很容易联想到队列,再根据他要返回滑动窗口中的最大值,可以考虑使用。与之前几题类似,肯定不能每次移动滑动窗口时就从窗口第一个元素开始枚举,这样一定会超时。的滑动窗口从数组的最左侧移动到数组的最右侧。,对于后者,我们可以用。

2024-04-18 15:54:57 273

原创 leetcode

我们可以通过前缀和尝试减少时间复杂度,定义 pre[i] 表示 nums 数组中前 i 个元素的和,那么 pre[i] = pre[i - 1] + nums[i]。因为 j 在 i 之前,第一想法就是每次移动 i 时,需要从头往 i 遍历一次来看有没有满足条件的 pre[j],但这一定会增加复杂度,所以我们可以通过哈希表来进行优化,所以考虑以 i 结尾的和为 k 的子数组个数时,只需要统计有多少个前缀和为。看题目给的数据范围,枚举在数据较大时肯定会超时,枚举思路就是。子数组是数组中元素的连续非空序列。

2024-04-17 20:09:07 264

原创 leetcode

同样的滑动窗口思路,但是判断字符串是否是字母异位词,改用长度为26的数组来记录遍历到的字串中字母出现的次数与 p 字符串中字母出现的次数,若两者相同,则是字母异位词。用滑动窗口去遍历整个字符串,每次遍历到一个字串就sort一次,再与sort好的字符串 p 比较,当字符串长度过长时,这个做法肯定会超时.的子串,返回这些子串的起始索引。不考虑答案输出的顺序。指由相同字母重排列形成的字符串(包括相同的字符串)

2024-04-16 20:14:50 160

原创 leetcode

很明显的一道滑动窗口。我们定义两个指针:慢指针 i 和快指针 j,i 指向滑动窗口的第一个元素,j 指向待添加元素。每次挪动 i 指针或 j 指针后,用 k 指针从 i 指针所指位置往后遍历,一直到 j 指针所指位置的前面一个位置,判断 k 遍历到的字符与 j 是否相同,再根据判断结果挪动对应的指针即可。因为在上述代码中的 while 循环里,我们是通过 for 循环遍历一遍当前不重复字符串来判断 j 指针指向的字符是否重复,造成了时间上的一次浪费。,请你找出其中不含有重复字符的最长子串的长度。

2024-04-15 17:52:12 176

原创 leetcode

所以最开始的思路是最外层用一个for循环遍历从1到(len - 1)的数组元素,对于每个元素再通过内层两个for循环求出左边的最大高度与右边的最大高度,然后用其中较小者减去当前高度即可。由于嵌套了两层循环,时间复杂度为O(n^2),于是考虑优化。根据题意,给定的高度数组最左边和最右边的点一定接不了雨水,所以我们需要求出第1个点到第(len - 1)个点所能存储的雨水之和。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。而如何求每个点能接到的雨水数量,个非负整数表示每个宽度为。

2024-04-14 21:13:25 324

原创 mysql中的DML、DQL、DCL常用命令

概念:将一列数据作为一个整体,进行纵向计算,作用于某一列(字段)

2024-04-08 17:00:58 868

原创 leetcode记录

盛水最多的容器给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。**说明:**你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2:

2024-04-08 15:21:19 552

原创 JDBC笔记

​ (1).数据库连接池是个容器,负责分配、管理数据库连接(Connection);​ (2).它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;​ (3).释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏好处:资源重用;提升系统响应速度;避免数据库连接遗漏上图中蓝色部分为数据库连接池。

2024-04-06 19:00:02 490

原创 java线程相关

多线程是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)**例:百度网盘能够同时上传和下载文件,因此百度网盘在后台肯定要提供两条执行流程,一个用来上传,另一个用来下载。**这就是多线程模式。

2024-04-06 17:35:02 571 1

原创 题解记录~

开始时左右指针都指向0,由于右指针 right 指向的是0,所以不进行交换操作,直接将 right 往后移。此时 left 指向0,right 指向1,right 指向了非零数,将0和1进行交换,并且 left 往后移。那么我们再考虑特殊情况,假设他给定的数组里没有0,那么通过以上操作可以知道,左右指针始终指向同一个数字,即使进行交换操作也是这个数字自己和自己交换,并不会影响数组的顺序。对于这个问题我们要给出一个O(n)的解决方法,自然而然想到先对给定的数组进行排序,然后用双指针的方法,

2024-04-06 10:31:24 399 1

原创 leetcode做题记录

给定一个整数数组nums和一个整数目标值target,请你在该数组中找出target的那整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。**进阶:**你可以想出一个时间复杂度小于O(n^2)的算法吗?

2024-04-02 15:03:07 314 1

原创 mysql中DDL常用语句

2.修改字段名和字段类型:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];7.删除指定表,并重新创建该表:TRUNCATE TABLE 表名(作用是将该表数据全部清空,得到一张全新的空表,但结构不变);1.往表结构中增加字段:ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT注释] [约束];6.删除表:DROP TABLE [IF EXISTS] 表名;字段1 字段1类型[COMMENT 字段1注释],

2024-04-01 16:48:37 299

原创 洛谷P1057解答记录(dp相关)

dp[i][j]表示编号为 i 的人经过 j 次传球后到他手上的方案数。此处需要注意该状态转移方程需要分两种情况:(1).和1号相邻的n号需要单独拿出来处理;(2).和1号相邻的2号可以和其他编号的人一样进行统一处理。因为有m次传球,所以需要求1号进行m次传球后球能回到他手上的方案数,只需要求经过m-1次传球后,球到达2号手里的方案数和球到达n号手里的方案数即可。最终我们再考虑遍历顺序,我这里采用的是外层遍历传球次数,内层遍历人员。根据dp的解题步骤,我们需要将原始问题分解成子问题。

2024-03-28 21:26:01 284

原创 计算机组成原理6位原码阵列乘法器

于是乎,我们之前得到的X原码和Y原码就派上用场了,由于两者存放的都是原码,想要正常显示就得将其转为补码,再传入X的真值与Y的真值。而且你把6位的原码转补码电路画完后,由于结果P是11位的,应该考虑和X、Y同样的问题,需要将P的原码转成补码才能使P真值反应真实数据,所以你还要手动扯线画一个11位原码转补码电路。将数值位传入无符号5位阵列乘法器得到结果的数值位,然后将符号位和数值位结合起来,再传入11位原码转补码电路,输出为P真值即可。分理处的最高位是符号位,后面需要进行异或操作得到结果的符号位。

2024-03-28 11:43:25 1323

原创 背包问题变体之分组背包

定义:分组背包问题是背包问题的一个变体,与传统的背包问题不同之处在于,物品被划分为不同的组,每个组内的物品具有一定的。在解决分组背包问题时,需要考虑每个组内的物品如何选择,以及在选择时需要满足的约束条件。简单来说,就是,然后,每个物品都有自己的体积和价值。现在,让你用这个背包装物品,。

2024-03-17 21:52:31 667 1

原创 XMU上机部分试题详解

sstream>主要用来进行数据类型转换,由于<sstream>使用 string 对象来代替字符数组,就避免了。

2024-03-14 20:56:44 834

原创 数据库系统第一章笔记

缺点:1)结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握;2)网状模型的DDL(数据定义语言)和DML(数据操作语言)复杂,并且要嵌入某一种高级语言,用户不容易掌握;3)由于记录之间的联系是通过存取路径实现的,应用程序在访问数据时必须选择适当的存取路径,因此加重了编写应用程序的负担。优点:1)能够更为直接的描述现实世界,如一个结点可以有多个双亲,结点之间可以有多种联系;2)具有良好的性能,存取效率较高。数据库系统是由外模式、模式和内模式三级结构构成。

2024-03-05 23:40:23 670 1

原创 DFS相关:详解基础八皇后问题

八皇后问题是一个经典的逻辑问题,源自于国际象棋中的皇后走法。问题的设定是,在一个 8x8 的棋盘上放置八个皇后,使得它们互相之间不能攻击,即任意两个皇后都不会在同一行、同一列或同一斜线上。皇后能够攻击同一行、同一列和同一对角线上的任何其他棋子,因此在布置皇后时需要考虑这些规则,确保它们互不攻击。把问题的描述总的概括一下,并将其推广到一般情况,也就是下面我们来看一道例题:根据题目描述,可以得知本题的数据范围不是很大。而笔者最近在进行DFS的相关练习,所以这里直接采用DFS对此问题进行求解。

2024-03-04 21:09:53 482

原创 DFS入门

DFS的本质就是递归,对于不同的问题,在递归的过程中进行的操作也不同。

2024-03-03 16:43:37 622

原创 动态规划入门相关例题总结

一般来说,除了位于边界上的点,我们要到达该二维数组上的某一点,只能够从该点的左边或者该点的上方到达,那么我们的边界情况就可以分为两种情况:在上边界与在左边界。在上边界的点只能够由该点的左边到达,在左边界上的点只能够由该点的上方到达,因此我们就确定了该dp数组的边界条件。对于一般的点,既可以从该点的左边到达也可以从该点的上方到达,至于如何选择,取决于从左边到达能拿到的价值多还是从上方到达能拿到的价值多,因此可以得到方程的一般情况。,那么我们就只能在该物品的前方所有物品中选取最大价值的物品,

2024-02-04 16:29:15 1054 1

原创 动态规划入门

菜品的价格,那么就没有成立的方案。首先明确dp数组的含义,dp[i][j]表示用 j 元吃前 i 种菜,然后我们再定义数组a[i]来存放每道菜的价格。原问题就是你要求解的这个问题本身,子问题是和原问题相似但规模较小的问题(原问题本身就是子问题的最复杂的情形,即子问题的特例)。DP数组也可以叫“子问题数组”,因为DP数组中的每一个元素都对应一个子问题的结果,DP数组的下标一般就是该子问题对应的状态。即:dp[i][j] = dp[i - 1][j] + dp[i - 1][j - a[i]];

2024-02-03 23:21:10 331 1

原创 近期总结(二)

第 1 轮,你打开所有的灯泡。对于这个贪心策略,我们不能想到相关反例推翻该策略,就可以去尝试一下,先定义农民结构体,存入价格和每个农民拥有的牛奶量,定义cmp函数根据牛奶的单价进行升序排序,接下来再进行分类讨论,累加出最小费用即可。第一部分是将传入函数的两个变量进行排序,该方法需要满足第一个数大于第二个数,然后定义一个新变量来存两个数取余的结果,然后进行辗转相除,当余数为零的时候退出循环,函数返回除数即为两个数的最大公因数。若存在和为m的数对,输出两个整数,小的在前,大的在后,中间用单个空格隔开。

2023-11-05 23:31:48 48

原创 近期总结(一)

因此,如果在循环内定义二维数组的话,在循环外无法访问到,也就无法输出最终结果,所以这里可以考虑使用vector进行动态数组的定义,对于每个动态数组进行分别排序输出。因此,在程序第一个出现for(auto c : str)的位置,意思是在for循环中,将str字符串中每一个字符依次赋值给c,再由c在for循环中对其进行处理,但是不会影响到str原来的值。是iomanip库中的setbase函数,可以改变cin输入数据的进制,因此在此代码之后再输入的数据就是十六进制的数据。缺省地,cerr是缓冲的单元。

2023-10-22 23:56:35 66 1

原创 基本排序算法总结

由于以上三种算法的时间复杂度并不佳,如果在算法竞赛中遇到非常庞大的数据量,以上三种排序方法可能会耗时很久,所以一般算法竞赛中并不会使用这些排序算法。而学习这些算法的目的是理解排序算法的底层逻辑,明确排序是如何在程序中将无序排成有序,以及对自己思维进行一定的训练。下面将介绍一种在算法竞赛中较为常用的排序算法。

2023-09-19 23:27:25 98

原创 高精度乘法中竖式错位问题的分析与总结

不难发现,在错位相加的过程中,得到的结果每一位的下标c的数字与竖式的中间结果的下标a、b数字有一定关系。所以我们可以先将乘法结果中每一位c(i + j - 1)先行计算出来,不进行进位处理,到最后所有的c(i + j - 1)都计算完毕之后,统一由低位到高位进行进位处理,从而得到最终的结果。解决方法为用string变量或者字符数组以字符串的形式逐位存放这个数字,再用循环遍历这个字符串,将其每一位数字逆向存储在新建的整型数组中(注意要开三个整型数组,一个用来存放答案,另外两个用来存放输入的数字)。

2023-09-18 16:07:18 115

原创 洛谷P1563玩具谜题(模拟)的不同细节处理

以上代码运用了三个一维数组和一个二维数组存放每个职业的状态(direction表示朝里朝外的方向、lorr表示向左数还是向右数、num表示数的个数、name作为二维字符数组用来存放职业名称),并定义ans在程序中的循环里根据所指的职业不同进行实时更新,最后输出ans对应在name数组里的职业名称即可。小南发现, 这个谜题中玩具小人的朝向非常关键, 因为朝内和朝外的玩具小人的左右方向是相反的: 面朝圈内的玩具小人, 它的左边是顺时针方向, 右边是逆时针方向;有一天, 这些玩具小人把小南的眼镜藏了起来。

2023-09-17 13:28:12 65 1

原创 洛谷P2670扫雷问题反思

在 n 行 m 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。另外一个值得学习的地方是代码开头定义的两个一维数组,他的意义在于当我们判断地雷阵中每一个位置周围的地雷情况时,可以不用写八条if语句来判断周围是否存在地雷,而是可以直接通过一个for循环来判断(通过改变i、j的值),这样可以大大缩短代码长度,增加代码的可读性。表示相应格子是非地雷格。本题难点并不在于如何输入地雷阵,而是如何在代码后半部分的循环中逐个判断地雷阵中的地雷,以及非地雷位周围的地雷数量。

2023-09-17 12:47:27 79 1

原创 对于洛谷P1042乒乓球问题(模拟)的复盘与反思

华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在 1111 分制和 2121 分制下,双方的比赛结果(截至记录末尾)。比如现在有这么一份记录,(其中 WW 表示华华获得一分,LL 表示华华对手获得一分):WWWWWWWWWWWWWWWWWWWWWWLWWWWWWWWWWWWWWWWWWWWWWWLW在 1111 分制下,此时比赛的结果是华华第一局 1111 比 00 获胜,第二局 1111 比 00 获胜,正在进行第三局,当前比分 11 比 11。而在 2121 分制下,此时比赛结

2023-09-14 21:50:42 309

空空如也

空空如也

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

TA关注的人

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