自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 全局变量小bug

每一次提交完一个测试用例,全局变量就被改变了。下一次再提交,因为判提系统不会重新初始化全局变量,所以会被影响。

2023-11-15 10:47:51 67

原创 StringTable引发的思考

回到StringTable,StringTable在jdk1.8中,存放在堆中,但是依旧保持了不可变性和共享性,具有常量池的性质。(ps:我也不确定能够被回收算不算是优点,应该说对于常量池(StringTable)中的字符串对象,可能回收了影响也不大,而且他们很多都是用一下就不需要了,所以这样来看算是一种优点吧)我也不知道他物理内存在哪,有可能是和 堆,虚拟机栈,本地方法栈,程序计数器平级的,所以大家都说jvm的内存区域有堆,方法区,虚拟机栈,本地方法栈,程序计数器。在jdk1.8中,存放在堆中。

2023-10-30 17:55:43 68

原创 引用、全局变量、递归、回溯

递归过程中加引用和不加引用

2023-10-04 11:50:20 100

原创 python学习笔记

与元组不同,列表可以随意添加、删除和修改元素,因此更适合用于需要经常修改的数据。

2023-05-08 20:29:20 78

原创 k次取反序列最大值

k%2 == 1,说明取反一次即可, ==0就不用取反。这个思维虽然知道了很简单,但是轮到自己凭空想,我是第一反应肯定想不到用k的奇偶性,只会觉得取反k次即可,多简单,就写上去了。所以从这一点应该意识到,数学思维非常重要,头脑多转一个弯,就会省去很多时间和精力!遍历完一遍发现k还没用完,说明小于0的已经全部变成正数了。这个时候整个数组就是非负数组,最小值也就是最后一个元素。保持数组最左边一定是整个数组的最小值,这样如果最小值小于0,就换,如果最小值不小于0了。但是这太慢了,因为要sort很多次。

2023-05-06 15:39:40 51

原创 小bug合集。。

这段代码中,s[j] >= g[i]写在了 j < s.size()前面。因为j等于s.size()了会先判断s[j] >= g[i],此刻已经越界访问了s数组。

2023-05-05 15:23:15 57

原创 验证二叉搜索树

在这个特定的代码中,当节点的值小于或等于max1时,说明当前节点不满足二叉搜索树的规则,因此返回false表示当前子树不合法。值得注意的是,如果在整个递归过程中没有返回false,最终将返回true,表示整个二叉树是一个合法的二叉搜索树。在二叉树的遍历过程中,当遍历到叶子节点时,如果该函数没有返回任何值,它将自动返回到它的调用者(即调用该函数的上一级函数)并继续执行调用者的其他代码。红色代码重要,他要记录左边的最大值,并不是左孩子,因为左孩子的右孩子可能会大于爷爷,所以要记录所有左边的最大值。

2023-04-26 11:06:04 33

原创 二叉搜索树递归出口问题

没有执行,于是要继续执行,到了5,5不是null也不符合条件,继续进行5的res=searchBST(root->left,val),然后发现5的左孩子为空,好家伙,res变成了null。,还有一句5的res = searchBST(root->right, val)没执行,于是去看5的右孩子,右孩子为空,返回了null,res再次赋值为null,这个才是最终res的null,也就是5的右孩子!语句就不会被覆盖了!我这里的逻辑就是,如果找到了符合条件的节点那么就返回该节点,找不到了,最终返回null。

2023-04-22 11:49:55 70

原创 用后序和中序遍历构造二叉树

【代码】用后序和中序遍历构造二叉树。

2023-04-21 20:38:37 49

原创 常用库函数

s.substr(a,b):取s子串,从第a个位置开始,往后取b个长度。如果想要实现从a到b,就用s.substr(a,b-a + 1)stoi(s):将string转化成int型。

2023-04-19 21:25:48 34

原创 回溯法第二题

链接:https://leetcode.cn/problems/combination-sum-iii。返回 所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可以以任何顺序返回。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输出: [[1,2,6], [1,3,5], [2,3,4]]输入: k = 3, n = 7。输入: k = 3, n = 9。输出: [[1,2,4]]每个数字 最多使用一次。没有其他符合的组合了。没有其他符合的组合了。

2023-04-16 16:59:59 37

原创 组合问题回溯法

回溯其实就是递归,这里很容易想到用多层for循环来暴力破解。改题的k=2就用两层for循环,k=n就用n层for循环,但是写代码写那么多for循环肯定不切实际。所以使用回溯法解决这个问题。1、确定递归参数和返回值。一层递归就是一层for循环。

2023-04-16 15:36:21 32

原创 if语句不用else错在哪里

如果不用else,他就是错误的。为什么呢,我之前想,它只要满足第一个,就不会满足第二个和第三个。满足第二个,就不会满足第一个和第三个。这里是关键,不满足,他就会执行后面的else语句!发现stack不是空,并且stack.top也不是),直接返回false,根本就没有走到第二次for循环就结束了!假设我的s是(),那么在进入循环时。第一个if满足了,s将)压栈,然后再去看第二个if,不满足,看第三个if,不满足。所以能用else就用else,不要用多个if不加else。于是我debug了一下。

2023-03-26 14:43:31 338

原创 四数相加!

思路:分治,变成两数相加。前两个放一起,后两个放一起。两个for,前两个数组的和放进map,键是和,值是出现次数。然后遍历后两个,在map中找是不是存在0-(c +d)。存在,就把这个value加进const。//这里是加上map[0-(i+j)]而不是++,因为重复的也算。

2023-03-25 12:19:43 33

原创 Stl中的map基操

其中,使用迭代器进行元素操作的方法可以保证时间复杂度为 O(log n),而使用下标运算符。的方法则会在需要时自动插入新元素,因此可能会有额外的开销。

2023-03-24 17:16:52 37

原创 两数之和(哈希)

遍历数组,每遍历一个数,判断target - 这个数的值是否在map中,如果出现在了map中,就返回map的值(下标)和i。如果没有出现,就把这个数的大小(键),下标(值)放进map中。建立map,map中的存储结构为 {key:数据元素,value:数组元素对应的下标}。

2023-03-24 17:14:10 30

原创 快乐数(无限循环)

字符转化为数字时就出现了问题。字符 s[i] 被赋值给整型数组 arr[i],但是 arr[i] 的类型是整型而不是字符型,因此赋值时字符会被隐式地转换为它的 ASCII 码值。如果想要将字符转换为对应的数字,应该将字符减去字符 '0',这样得到的结果就是该字符所表示的数字。要想到,这里必须要用到set,如果他发生了无限循环,那么sum值一定会重复出现,所以只要sum重复出现了,那么就说明进入了死循环。这里思考一个问题:他如果是无限循环,那么他就一直被困在了while中,怎么得出false呢?

2023-03-24 16:47:38 65

原创 两个数组的交集

因此,nums_set.find(num)!= nums_set.end()* nums_set.end(),则表示 num 存在于 nums_set 中。* 中查找元素 num,如果 num 存在于 nums_set 中,* 否则返回 nums_set.end(),表示迭代器的结束位置。* 即 nums_set.find(num) 返回的迭代器不等于。* 的含义是:如果在 nums_set 中找到了 num,* nums_set.find(num) 表示在无序集合 nums_set。

2023-03-24 16:13:08 37

原创 相交的链表

思路:将两个链表右端对齐,分别计算长度,然后长度相减得到gap,让长的那个往前走gap次,这样就保证他们不仅右端对齐,还从同一起点出发。这样每走一次,就判断,如果结点相同就返回。走完了还没找到,说明没有相交的结点,返回null。

2023-03-24 10:58:37 34

原创 删除链表的倒数第n个结点

红色部分注意:如果是第一个结点,也就是倒数第size个结点的时候,没有头结点,第一个结点的前面是没有结点的,所以不能用l.next = l.next.next,所以这个当作特殊情况。直接返回第二个结点就行了。思路简单,用左右指针,保持一定的距离,右指针走到null了,左指针的位置就是倒数第n个位置。题目所给链表是不带头结点的链表。

2023-03-24 10:06:37 81

原创 两两交换链表中的结点

画个图自己跑一遍代码,红色的特定条件想了很久。

2023-03-24 09:43:19 21

原创 只包含两种元素的最长连续子序列

因此,只包含两种元素,就可以将哈希表的键看成元素种类,而值就是对应的个数,比如{1,1,1,2,2},这样就是(1,3)和(2,2)。如果他的size大于2了,就说明不止两个元素了,这个时候就要消除一种元素。显然,肯定从左边的开始消除,所以就要it.second --;当左边元素的个数为0,即it.second等于0的时候,就要把这个元素从哈希表中擦掉了。然后左指针再向前进。滑动窗口显然要用左右指针,但是我如何去判断一个窗口中只有两种元素呢,也就是while的条件非常不好写。哈希表的特点就是他的。

2023-03-22 19:54:45 41

原创 长度最小子数组

外层for指向终止位置,用right表示。内层while从第一个开始,指向起始位置,用left表示,只要窗口内的值大于等于target,left就往右走。如果小于target了,left不变,right往右走。left和right只是从头走向尾,没有重复遍历数组。所以时间复杂度是O(n)。用两层for,外层for指向起始位置,内层for指向终止位置,计算起始到终止位置的和,如果大于等于target,就记录下来,比较是否小于minlength,如果小于minlength,就赋值给minLength。

2023-03-22 16:49:05 49

原创 有序数组的平方

数组是有序的,负数平方会变正,所以数组中元素平方的最大值一定是在数组的两端的。比较old数组两个指针位置上元素的平方大小,大的那一个放进new数组右边。然后old指针往更小元素移动,new指针往左移一格。时间复杂度:O(n + nlogn)old数组用两个指针,分别从两端开始。new数组用一个指针,从最右端开始。使用空间换时间,申请新的数组。方法一:暴力法,平方后排序。

2023-03-22 11:20:34 26

原创 移除元素:

快慢指针同时从起点出发,如果快指针不等于target,快慢指针位置的元素互换,然后两个一起前进;如果快指针等于target,慢指针就不动,快指针单独前进。给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。暴力法,遍历数组,如果遇到了val,那么就把val后面的所有元素往前移动一个单位,然后数组长度 - 1。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。你不需要考虑数组中超出新长度后面的元素。

2023-03-22 09:14:49 21

原创 e的e次方

iomanip可以设置输出流的格式,如设置输出的精度、宽度、填充字符等,以及控制流的格式状态,如对齐方式、输出模式等。我们使用cmath头文件中的exp函数计算e的值,该函数的参数为一个double类型的数,返回值也是一个double类型的数。我们使用setprecision函数设置输出的精度为6位小数,并使用fixed修饰符来表示输出的数为定点数,这样就可以输出e的值了。setw(n):设置输出的域宽为n,表示在输出一个数值时,占用的字符数至少为n个,不足n个会用空格填充。

2023-03-20 19:18:21 134

原创 函数依赖保持性

F1 = {ABCD},所以在F中找到所有包含ABCD的依赖,包括传递依赖。由G+导出,所以他({ABCD,EFA})具有函数依赖保持性。(传递依赖可以包括比如A->E,E->D,可以写A->D)F2 = {EFA},所以在F中找到所有包含EFA的依赖,判断等式 F+ = G+ = F 是否成立。

2023-03-20 16:39:56 389

原创 无损连接性

F={ABCD,EFA}只有两个元素。当且仅当F有两个元素时,才可以使用方法二。求{A}+ -->?{ABCDF} 容易看出A+ = {ABCDEF}2、CD->E ,CD两列不相同,C是aa,D是a空,所以不一样,就不做。因为A+ = {ABCDEF}因为矩阵中出现了全a行。{ABCD} 交{EFA} = {A}求无损连接性{ABCD,EFA}

2023-03-20 10:52:05 358

原创 数据库范式判断

1、求候选键2、非键属性是否部分依赖于候选键如果符合,则他是1NF如果不符合,则继续判断3、非键属性是否传递依赖于候选键如果符合,则他是2NF如果不符合,则继续判断4、判断所有依赖项左边是否全为候选键如果是,则他是BC范式如果不是,就是3NF候选键:A B如果 B -> C,也就是C依赖B那么C就部分依赖于AB,(理解:C依赖于AB的一部分)假设有两个条件:1) B ->A,A->C,(C非键,B是候选键)那么B->C2) A不能 ->B。

2023-03-20 10:25:09 3220

原创 循环不变量

首先,我们先假设整个数组就是我们要查找的范围,然后计算出中间位置的索引,比较中间位置的元素和目标元素的大小。如果目标元素比中间位置的元素小,说明目标元素在中间位置的左边,那么我们就可以把查找范围缩小到左半部分。反之,如果目标元素比中间位置的元素大,说明目标元素在中间位置的右边,那么我们就可以把查找范围缩小到右半部分。总之,循环不变量是一种非常重要的概念,可以帮助我们更好地理解循环过程中的变化和条件。在使用二分查找算法时,通过定义循环不变量可以帮助我们更好地把握查找过程,提高算法的正确性和效率。

2023-03-19 20:33:55 214

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

我就想,先找到这个值的位置,然后用左指针往左移动,移动到不等于target的地方为左边界,右指针往右移动,移动到不等于target的地方为右边界。但是它超时了,原因估计是尽管用二分查找找到了target位置,但是往两侧找到边界还需要一定的时间,如果整个数组全是同一个数都是target,那么查到了在中间,然后往两边移动,需要移动整个数组的长度,所以这个也是不符合要求的。while循环里面,找到了这个位置,即nums[mid] == target时,直接return mid,也就是target的位置。

2023-03-19 17:11:35 106

原创 一元多项式的乘法与加法运算

设计函数分别求两个一元多项式的乘积与和。

2023-03-17 09:55:37 60

原创 最大子列和问题

给定K个整数组成的序列{ N1​, N2​, ..., NK​ },“连续子列”被定义为{ Ni​, Ni+1​, ..., Nj​ },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。本题旨在测试各种不同的算法在各种数据情况下的表现。

2023-03-16 11:33:39 31

原创 二叉树基操

【代码】二叉树基操。

2023-03-16 10:39:32 40

原创 先序输出叶结点

return;return;

2023-03-16 10:28:35 29

原创 二叉树的遍历

/ 后序遍历右子树。// 先序遍历右子树。// 后序遍历左子树。// 中序遍历右子树。// 先序遍历左子树。// 中序遍历左子树。

2023-03-16 10:17:37 73 2

空空如也

空空如也

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

TA关注的人

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