- 博客(85)
- 收藏
- 关注
原创 力扣Hot100-94二叉树的中序遍历
注意:在压入左孩子时要判断这个左孩子是否被访问过,eg:在[1,null,2,3]中3被访问后,节点2在栈最上面,进入循环后断2是否有左孩子,2有左孩子节点(3),但是已经被访问,若是再次入栈会陷入死循环。使用栈:当栈不为空时,对当前栈中最上面的节点进行判断,如果节点存在左孩子,且左孩子没有被访问,则将左孩子压入栈,不存在左孩子则将当前最上面节点弹出栈,并判断其是否有右孩子,有则压入栈。递归算法很简单,你可以通过迭代算法完成吗?给定一个二叉树的根节点。
2024-07-21 14:45:03 257
原创 力扣Hot100-148排序链表(插入排序/归并排序)
给你链表的头结点head,请将其按排列并返回。[1,2,3,4]head = [][]方法一:插入排序,但是由于链表是无序的,插入排序在最坏情况下的时间复杂度是 O(n^2),这对于较大的输入会导致超时插入排序思想,依次对未排序的节点插入到已经有序的链表中你可以在O(nlogn)时间复杂度和常数级空间复杂度下,对链表进行排序吗方法二:归并排序归并排序在链表排序中表现良好,归并排序(Merge Sort)是一种基于分治法的排序算法,具有稳定的排序表现,时间复杂度为 O(nlogn)。
2024-07-16 15:29:51 987
原创 SQL练习
count()、max()、min()、sum()、avg()这些是聚合函数,不能出现在where子句中,可以出现在group子句中,所以A、B选项是错误的。(1).FROM 子句, 组装来自不同数据源的数据 (2).WHERE 子句, 基于指定的条件对记录进行筛选 (3).GROUP BY 子句, 将数据划分为多个分组 (4).使用聚合函数进行计算 (5).使用 HAVING 子句筛选分组 (6).计算Select所有的表达式 (7).使用 ORDER BY 对结果集进行排序。
2024-07-16 11:54:47 619
原创 数据结构专项-字符串
面向字符的操作为以字符为单位对数据进行操作,在读的时候将二进制数据转为字符,在写的时候将字符转为二进制数据,这些类都是Reader和Writer的子类。深拷贝和浅拷贝:浅拷贝实际上是复制了被拷贝对象的引用,也就是说浅拷贝的和被拷贝对象指向的是同一块内存空间,而深拷贝则是连同引用的对象也被拷贝,两者指向的是不同的内存空间。然后计算乘法,故之后是*,再计算加法,因此+要在6的前面,不然就是计算4*(x+3)+6了,故选D。中缀表达式中应该先计算x+3,因此后缀表达式中+应该出现在x和3的后面,排除BC。
2024-07-16 11:54:25 403
原创 Java入门-Day7-面对对象基础-构造器
/现在创建对象时就根据输入的参数判断触发哪一个构造器。public Student(String name,double score){//有参数构造器。//构造器:对象名称和方法名称一样,只要参数列表不一样就可以创造很多构造器。①类在设计时,如果不写构造器,Java会为类自动生成一个无参构造器。②:一旦定义了有参数构造器,java就不会帮我们自动生成无参数构造器。public Student(){//无参数构造器。//特点1:创建对象时,对象会去调用构造器。/*触发无参数构造器*/
2024-07-09 17:18:53 168
原创 java入门-面向对象基础(this关键字)
if(this.score>score){//注意score指的是从方法中的形参获得到的,而this.score指的是上面的成员变量score。this 关键字是一个变量,可以在方法中使用,用来拿到当前对象,那个对象调用方法,this就指向哪个对象,也就是拿到哪个对象。//调用方法时,先将自己在堆内存中创建的keythis对象地址传给方法中的this。public void PintThis() { //thiskey类中的方法 //注意不能是static。//成员变量score。
2024-07-09 11:22:47 424
原创 java入门-java方法实现+案例
public static int sum(int a,int b){//int 是返回类型,sum是方法名称。System.out.println(“无参数无返回值”);//素数是除了1和它本身以外,不能被其他正整数整除的数。判断101-200之间有多少个素数,并输出所有素数。eg:3,7是素数,而9,21不是素数。(一)使用方法实现求和。(二)随机生成验证码。
2024-07-09 10:54:12 316
原创 java入门-3案例知识(在程序中接收用户通过键盘输入的数据)
使用API文档:搜索Oracle官网->Product中找到java->java download->document download。在程序中,提示用户通过键盘输入自己的姓名,年龄,并能够在程序中收到这些数据,如何解决?//调用java写好的程序,通过API(应用程序编程接口)调用。
2024-07-05 15:30:30 109
原创 力扣Hot100-24两两交换链表中的节点(三指针)
思路:要实现两个节点node1,node2的交换必然需要三个指针实现,其中两个指针分别指向两个节点,另一个指针指向node1的前一个节点。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。为使后续节点也能循环使用该代码,需要将p,q,w分别按照相对位置指向下一对要交换的结点。
2024-07-03 23:47:21 261
原创 力扣Hot100-19删除链表的倒数第n个节点(双指针)
要删除的节点Node为倒数第n个,当n已知后,要删除的节点与最后一个节点之间的距离是已知的,设为s。可以使用双指针p,q,将两个指针的距离调整为s+1,此时保持两个指针距离不变,对两个指针下移,直到指针q指向链表的最后一个节点时,指针p指向 要删除节点 的 前一个节点 。修改p->next=p->next->next便可实现删除倒数第n个节点。
2024-07-03 23:38:49 386
原创 java入门-基础语法(运算符)
/13abc ,由于计算是从前往后,在a,b出现时还没有出现字符串,能够计算,所以先计算a+b再拼接“abc”System.out.println("abc"+a+'a');//abc11a ,因为a是变量存储的值为11,使用单引号'a'后a变成了一个字符.a+=b即为a=(a的类型)a+b,为保证能够正确赋值,相加后的类型强制转换为a的类型。System.out.println("进行a++操作之后a的值"+a);System.out.println("进行a++操作之后a的值"+a);
2024-07-03 11:29:51 252
原创 力扣Hot100-2两数相加(反转链表)
根据加法的计算公式,我们应该知道要先将两个多位数(整数:a3a2a1和整数:b2b1)[a1代表一个阿拉伯数字]的地位对齐,从最低位开始相加,产生的进位传递给更高位,参与更高位的加法计算。为了将尾数对齐,可以采用反转链表的方式,此时得到a1a2a3和b1b2,按照顺序对两个链表的数进行相加,保存进位,两个链表中的指针下移继续相加,知道两个链表都结束(其中一个链表结束视为与零做运算)。的链表,表示两个非负的整数。请你将两个数相加,并以相同形式返回一个表示和的链表。的方式存储的,并且每个节点只能存储。
2024-07-02 23:36:09 437
原创 java入门3-java语法基础学习(类型转换)
byte(1个字节)->short(2个字节)->int(4个字节)->long(8个字节)->float(4个字节)->double(8个字节)// byte b=a;//报错,说明大范围类型变量不能直接赋值给小范围类型变量,只能使用强制类型转换。char(2个字节)->int->long->float->double。System.out.println("int转换成byte后的值:");//强制转换公式:数据类型 变量1=(数据类型)变量2、数据。表达式的最终结果类型由表达式中的最高类型决定。
2024-07-01 21:54:33 290
原创 力扣Hot100-141环形链表(「Floyd 判圈算法」(又称龟兔赛跑算法)/哈希表)
方法二:使用快慢指针,慢指针一次走一步,快指针一次走两步,当快慢指针相遇时则说明存在环:(用时较短,但两者时间复杂度都是O(n))方法一:使用哈希表记录已经访问过的节点地址,遍历链表判断当前节点是否已经出现过,出现过则出来环,未出现则不存在环。
2024-06-24 16:20:22 291
原创 指针*使用情况总结
在C++中,*用于指针,指针是的数据类型。(1)声明当前变量为指针变量(2)作为间接访问符,用于访问指针变量指向的值1.动态内存分配在运行时动态分配内存时,2链表节点引用3.传递大型结构体4.标识空指针
2024-06-18 16:52:12 403
原创 力扣Hot100-有效的括号(栈stack)
思路:由于括号都配对的,且从头开始扫描可以发现,最后出现的左括号,他对应的右括号往往最先出现(eg:"{ ( { [,判断字符串是否有效。
2024-05-30 17:03:18 441
原创 力扣Hot100-搜索二维矩阵II
因此,通过从 “根节点” 开始搜索,遇到比 target 大的元素就向左,反之向右,即可找到目标值 target。链接:https://leetcode.cn/problems/search-a-2d-matrix-ii/solutions/2361487/240-sou-suo-er-wei-ju-zhen-iitan-xin-qin-7mtf/每轮 i 或 j 移动后,相当于生成了“消去一行(列)的新矩阵”, 索引(i,j) 指向新矩阵的左下角元素(标志数),因此可重复使用以上性质消去行(列)。
2024-05-29 11:36:57 433
原创 力扣Hot100_54螺旋矩阵(注意思想:重新定义边界)
这里的方法不需要记录已经走过的路径,所以执行用时和内存消耗都相对较小首先设定上下左右边界其次向右移动到最右,此时第一行因为已经使用过了,可以将其从图中删去,体现在代码中就是重新定义上边界判断若重新定义后,上下边界交错,表明螺旋矩阵遍历结束,跳出循环,返回答案若上下边界不交错,则遍历还未结束,接着向下向左向上移动,操作过程与第一,二步同理不断循环以上步骤,直到某两条边界交错,跳出循环,返回答案
2024-05-28 11:11:10 164
原创 力扣Hot100-73矩阵置零(标记数组)
用矩阵的第一行和第一列代替方法一中的两个标记数组,以达到 O(1)的额外空间。在实际代码中,我们首先预处理出两个标记变量,接着使用其他行与列去处理第一行与第一列,然后反过来使用第一行与第一列去更新其他行与列,最后使用两个标记变量更新第一行与第一列即可。,(若第一行中存在零,则对应的这一列也要值为零,所以也会被标记,若第一行不存在零也不会导致影响第一行原本存在的值)。注意,在使用第一行和第一列记录其他位置是否存在值为零的元素时,若存在应该将第一行和第一列对应的值置为。的矩阵,如果一个元素为。
2024-05-24 15:07:53 414
原创 力扣Hot100-只出现过一次的数(技巧)
由于哈希表在查找目标数据元素的时间复杂度是O(1),所以考虑用哈希表判断当前元素出现过几次,出现过两次则将该元素丢弃。,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
2024-05-20 16:15:49 148
原创 java入门2-常用快捷键,IDEA的删除修改导入模块
(1)输入main,psvm后会自动补全内容:在英文状态写,点击回车,(2)sout回城后可以打印内容:可以在里面输入内容实现打印:其余同理。
2024-05-19 22:19:03 310
原创 力扣Hot100-T10和为k的子数组(前缀和+哈希表)注意思路
使用前缀和+哈希表进行优化 (小红书社招二面出现过):(1)首先使用sum[i]统计i小标之前的所有数之和(包括下标i指向的数),因此某一段序列和为k转化为sum[p]-sum[q]=k,;有效解决负数带来的问题。在遍历过程中用value记录前i个数组值得总和,使用哈希表记录,其中sum[value]对应的值表示和为value的数组段。(2)遍历一遍sum,当前sum[p]已知,k已知,只要判断是否存在sum[q]=sum[p]-k,就能判断当前下标作为开始,是否存在一段数组之和等于k,出现次数ti
2024-05-12 23:28:15 200
原创 力扣Hot100-T8无重复字符的最长子串(经典)
以 abc(a)bcbb 开始的最长字符串为 abc(abc)bb;以 abcabc(b)b 开始的最长字符串为 abcabc(b)b;以 (a)bcabcbb开始的最长字符串为 (abc)abcbb;以 a(b)cabcbb开始的最长字符串为 a(bca)bcbb;以 abca(b)cbb开始的最长字符串为 abca(bc)bb;以 abcab(c)bb开始的最长字符串为 abcab(cb)b;以 abcabcb(b)开始的最长字符串为 abcabcb(b)。因为无重复字符的最长子串是。
2024-05-11 10:45:01 208
原创 力扣Hot100-T7接雨水(动态规划,单调栈)
思路:根据图可以找到规律:当前指针指向下标t时,求t所能接到雨水的高度,由min(t左边最高,t右边最高)-height[t]所决定,eg:上面例子中下标t=2(下标从零开始),时左边最高为1,右边最高为3,所以所能接的雨水为min(1,3)-height[2]=1-0=1;对于后面的每一个下标t有RightMaxheight[t]=max(RightMaxheight[t+1],height[t]) (注意:因为是逆向,所以先知道t+1的右边最大高度,才能知道t的右边最大高度)
2024-05-10 14:12:40 337
原创 Hoot100-T6三数之和
经过上诉操作可以获得所有满足要求的序列,但由于三元组中排列顺序不重要,因此需要去除重复,将数组进行有序排列,当指针i或指针j指向的元素与上一个相同说明在上一轮已经判断过,直接跳过即可,有效避免重复判断(eg:-1,0,1,2,-1,-4 排列后为:-4,,0,1,2 其中(-1,0,1)是一个三元组,-1两次出现,当i指向第二个-1时由于其上一个也是-1,因此跳过对第二个-1的判断)不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。
2024-05-09 14:01:02 305
原创 力扣Hot100-T3最长连续序列()
正确思想:借用哈希表方便查找所需元素值value(将需要判断存在与否的元素Value作为哈希表的键,哈希表的值均为1表示当前元素存在),遍历一遍数组,指针i指向的数组元素value判断其是否是连续序列中的第一个(即value-1不存在),则忽略(eg:若当前value=9,若8存在则9不是连续序列的开头,忽略9继续遍历数组);对于超时的问题,添加判断,当前数字不是连续序列中的第一个时就跳过,同时要注意在第一个循环中要去重,判断哈希表中不存在当前nums[i]作为键时再插入。请你设计并实现时间复杂度为。
2024-05-08 17:21:59 230
原创 力扣Hot100-T5乘最多水的容器
二:(建议画图理解)还是使用双指针,但是改变移动策略,由于要使面积最大就要尽可能地使长和宽最大,因此一开始让i指向最左,j指向最右,使得Length最大;此时若还存在面积更大的2那只肯可能是在宽度上调整,宽度更高才能使面积更大,因此选择移动两个指针中高度较低的那个(i向右移,j向左移),当两个指针重合时就能保证找到面积最大的。时间复杂度为O(n).图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。轴共同构成的容器可以容纳最多的水。
2024-05-08 14:14:26 159
原创 力扣Hot100-T4移动零
移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。你能尽量减少完成的操作次数吗?,编写一个函数将所有。
2024-05-07 11:11:24 153
原创 力扣hot100-T2字母异位词分组
思路:根据题目可以知道将“字母组成相同,顺序不同的字符串”分为一组,所以一组的字符串排序后的字符顺序必然相同(eg:"aacbd"和“badca”将字符串中字母元素排序后均为“aabcd”),所以使用哈希表,将排序后字符串(“aabcd”)作为键,对应的同为一组的所有字符串({"aacbd",“badca”})作为值.最终有几个键就有几个分组。是由重新排列源单词的所有字母得到的一个新单词。可以按任意顺序返回结果列表。给你一个字符串数组,请你将。
2024-05-06 10:35:26 165
原创 java入门-常用Dos命令
(2)切换盘符:eg:切换到D盘 (英文模式下)进入Dos窗口的快捷键:Win+R 输入cmd。(4)进入当前盘下的某个目录(当前在D盘)进入多级目录:D/try/test1。当只输入部门目录时使用Tab键补全。进入单极目录:D/try 的命令。(3)查看当前目录的文件信息。
2024-05-05 19:52:59 129 1
原创 力扣hot100-T1两数之和
由于题目说数组中a+b的和是target,说明当前已知的任意值a,和target,另一个数必然为target-a,即b=target-a。在这里将所有数组存入哈希表中,nums中的元素值作为哈希表中的索引,nums中的索引作为哈希表中元素值。为解决上诉代码中的问题,此处选择将值存入哈希表的同时进行判断:由于要实现a+b=target需要保证a,b同时出现,因此在遇到第一个数a时可以先将a和a的数组下标存入哈希表,当遇到b时判断哈希表中有没有所需要的b,有则查找成功,没有则将b存入哈希表,继续往下遍历数组。
2024-05-03 14:30:02 376
原创 169. 多数元素-面试经典150
在这之后,我们遍历哈希映射中的所有键值对,返回值最大的键。我们同样也可以在遍历数组 nums 时候使用打擂台的方法,维护最大的值,这样省去了最后对哈希映射的遍历。方法一:如果一个数组有大于一半的数相同,那么任意删去两个不同的数字,新数组还是会有相同的性质,即原来的“多数元素”在删除任意两个不同元素后数组中的“多数元素”的值不变。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。你可以假设数组是非空的,并且给定的数组总是存在多数元素。,返回其中的多数元素。多数元素是指在数组中出现次数。
2024-01-30 20:36:19 269 1
原创 80.双指针实现删除有序数组中的重复项 II(中等)-面试经典150题
给你一个有序数组nums,请你删除重复出现的元素,使得出现次数超过两次的元素,返回删除后数组的新长度。不要使用额外的数组空间,你必须在并在使用 O(1) 额外空间的条件下完成。为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下://是以“引用”方式传递的。也就是说,不对实参做任何拷贝// 在函数里修改输入数组对于调用者是可见的。// 根据你的函数返回的长度, 它会打印出数组中的所有元素。
2024-01-29 18:16:21 513
原创 26. 删除有序数组中的重复项()-双指针
如果不相等,将 q 位置的元素复制到 p+1 位置上,p 后移一位,q 后移 1 位。// 长度正确的期望答案。要求删除重复元素,实际上就是将不重复的元素移到数组的左侧。解:首先注意数组是有序的,那么重复的元素一定会相邻。不需要考虑数组中超出新长度后面的元素。1.比较 p 和 q 位置的元素是否相等。不需要考虑数组中超出新长度后面的元素。,返回删除后数组的新长度。删除重复出现的元素,使每个元素。
2024-01-28 20:07:03 368
原创 27移除元素(简单)-经典面试150题
你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。i用于从下标0开始对数组nums[]进行遍历,k用来指向当前可存放不等于val值的其他数组元素。你不需要考虑数组中超出新长度后面的元素。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。// 根据你的函数返回的长度, 它会打印出数组中。的元素,并返回移除后数组的新长度。
2024-01-28 19:01:19 495
原创 88.合并两个有序数组(简单)-
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。,5,6] ,其中斜体加粗标注的为 nums1 中的元素。最终,合并后数组不应由函数返回,而是存储在数组。需要合并 [1,2,3] 和 [2,5,6]。需要合并的数组是 [] 和 [1]。个元素表示应合并的元素,后。需要合并 [1] 和 []。中,使合并后的数组同样按。使用上面的二路归并可以实现。合并结果是 [1]。合并结果是 [1]。的算法解决此问题吗?
2024-01-26 13:50:09 228
原创 python入门-列表与元组(append,pop,len等函数使用),字典,集合使用
list2=["黑科技",2,32,[1,2,3]] #最后一项是一个列表,说明列表中还可以嵌套列表。list1=[1,2,3,4,5]#每一项使用逗号隔开。#注:列表中每一项可以是任意的类型。
2024-01-17 21:13:27 855
原创 Python入门-字面量,函数,类
ps:类与实例的关系:实例是类的一个具体例子(比如人是一个类,而张三是一个具体的人,属于其中的一个实例)(1)字符串需要用英文的双引号包围起来,比如打印"helloworld"Python 中常用的有6种值(数据)的类型。(2)浮点数,整数,字符串等字面量的写法。(3)字符串定义及打印。
2024-01-16 01:38:38 433
原创 学习 Linux 内核的系统调用方法理解并掌握 Limux 系统调用的实现框架、用户界面、参数传递、进入返回过程使用编译内核法和内核模块法这两种添加系统调用的方法添加一个不用传递参数的系统调用
在内核编译法添加系统调用的步骤中,我首先进入了根目录并进入kernel目录,然后打开sys.c文件并添加了打印"hello world"的函数。在内核模块法添加系统调用的步骤中,我编写了hello.c文件,并查询了sys_call_table的地址。在实验内核模块的系统调用时查询系统调用的地址后出现三个地址,其中,x32_sys_call_table是x32架构下的系统调用表,而sys_call_table是默认64位的系统调用表。实验中出现最多的错误就是打错文件导致各种报错,因此实验中最重要的就是细心。
2024-01-11 01:01:09 922
原创 基于开源的 RISCV 核 piRV32,搭建一个完整的片上系统(SOC)。学生需要进行硬件设计、软件编程,并验证系统的正确性。在本实验报告中,将详细介绍实验的设计流程、实验环境以及实验原理。
模块定义了处理器核与外部环境之间的输入输出接口,包括时钟信号(clk)、复位信号(resetn)、陷阱信号(trap)、存储器读写控制信号和数据信号(3)
2024-01-11 00:52:26 1177
帆软FR技术支持考核练习题
2024-05-08
(1)学习 Linux 内核的系统调用方法 理解并掌握 Limux 系统调用的实现框架、用户界面、参数传递、进入返回过程
2024-01-11
专家系统原理及实现,利用人工智能的产生式系统、图搜索算法以及专家系统的框架,建造一个小型医疗诊断或水果识别专家系统,具有知识库、
2024-01-11
深度学习设计(VGG19)智能计算系统
2024-01-11
基于XML/注解的AOP模拟银行账户
2024-01-11
java,航空订票系统,Java Swing、MySQL、Dijkstra算法
2024-01-11
一款航空订票系统,采用Java Swing框架进行界面开发,并通过JDBC连接MySQL数据库实现数据的存储和检索
2024-01-11
八数码问题求解,要求:设计估价函数,给出算法伪代码,并采用c或python编程实现,演示A算法的搜索过程,代码要适当加注释,实验
2024-01-11
八数码问题求解:设计估价函数,给出算法伪代码,并采用c或python编程实现
2024-01-11
成电(电子科技大学)820操作系统填空题汇总
2023-11-28
多媒体技术+pr,Dw,flash,ps
2023-07-07
SQL+邮局订报子系统+Qt
2023-07-07
基于卷积神经网络(CNN)的超分辨率图像
2023-07-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人