- 博客(45)
- 收藏
- 关注
原创 199.二叉树的右视图(两种方法实现)
对于一个任意给定的二叉树,我们不能确定二叉树的形状;设计一个每次遍历二叉树的右子树的深度优先遍历,这样深度优先遍历中每层遍历到的第一个结点就是最右边的结点;
2024-09-13 23:35:47
270
原创 148.排序链表
要求时间复杂度为o(logn),可以使用归并排序。代码实现步骤如下:1.找到中间节点,因为是链表,所以用快慢指针的方法确定中间节点,即fast指针的速度是slow指针的二倍,当fast指针走到链表尾结点的时候,slow指针的位置的结点恰好为中间节点;2.将头结点到中间节点的链表;中间节点到尾结点的链表分别排序;3.将两个排序好的链表进行合并;只有一个结点或者头结点为空的时候直接返回头结点,无需排序。
2024-09-07 00:56:08
246
原创 LeetCode2.两数相加
由于输入的两个链表都是逆序存储数字的每一位,所以两个链表中同一个位置的数字可以直接相加,同时遍历两个链表,逐位计算两个结点的数值之和,同时当前两个结点的数值之和还要加上来自低位的进位(因为逆序存储,所以低位就是两个链表的当前节点的前一个结点相加产生的进位),即设两个结点的当前节点分别为n1和n2,前一位的进位为carry,当前的和为n1+n2+carry,对应答案链表应该放的值为(n1+n2+carry)mod 10,新的进位值为(n1+n2+carry) / 10。
2024-09-05 20:47:56
320
原创 二叉树的三个简单题
今天做了几个二叉树的基础题,思路都能明白,但是细节上总会丢三落四,导致代码死循环等等,做这三个简单题复习了一下二叉搜索树、二叉平衡树的概念以及二叉树的深度递归算法,总之很有收获!希望大家喜欢。
2024-08-27 23:35:43
331
原创 有关滑动窗口的四道题(模板题)
做了几个有关字符串的题,看了大佬的代码,如果题目要求在字符串中找出满足条件的子串有很多都是利用滑动窗口的思想来解决的,所以,利用四个例题做个笔记。
2024-08-26 22:45:18
1037
原创 无重复字符的最长子串
定义一个数组,长度为128,保证每个字符都有对应的下标,将数组的元素的值设置为-1,设置左边界,遍历字符串中的字符,如果遍历到的当前字符已经遍历过,说明字符重复,调整左边界,用当前遍历到的字符串的下标减去左边界+1就是到当前位置的最长子串长度,遍历过程中的最长子串长度中的最大值就是答案。,请你找出其中不含有重复字符的最长子串的长度。请注意,你的答案必须是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。,所以其长度为 3。,所以其长度为 1。,所以其长度为 3。
2024-08-25 14:03:30
207
原创 从1到n整数中1出现的次数
当万位和千位为ab的时候,需要根据x的值进行判断,当x==0说明该位置在万位和千位为ab的时候不存在1的情况,当x==1需要根据cd的值进行判断,有00~cd种情况,当x>1的时候,说明x=1的时候cd位置可以取00~99,所以有100种情况。百位放1,求有多少种情况:_ _ 1 _ _,当百位放1的时候分为两种情况,第一种为万位和千位为00->11的时候,百位放1数字不大于12098,此时百位放1情况为12*100种情况,但是当万位和千位为12的时候,百位放1不成立。
2024-08-24 16:55:44
489
原创 数据流中的中位数
最好的办法是维护两个堆,分别为一个大顶堆和一个小顶堆,大顶堆存放比中位数小的数字,小顶堆存放比中位数大的数字,其中当数组元素为奇数的时候,大顶堆的元素个数与小顶堆的元素个数不相等,我们将多出的这个数字维护在大顶堆中,这样一来,当元素个数为奇数,直接返回大顶堆的堆顶元素,当元素个数为偶数的时候,返回大顶堆和小顶堆的顶部元素的和除以2。寻找数组中中位数的前提是数组有序,数组元素个数为奇数,中间的数字就是中位数;如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。
2024-08-24 08:31:42
410
原创 求数组中出现次数超过一半的数字
当count为0的时候说明第一个数字出现的次数到当前循环的位置时已经被其他数字抵消,说明第一个数字出现的次数并未过半。count为0,就重新假设一个数字为所求,循环结束的时候这个假设的数字就是出现次数大于数组半数的数字。那么遍历数组的时候,遇到第一个数字,就将中间变量count+1;数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。遇到不是第一个数字的数字就将中间变量count-1;假设数组非空,并且一定存在满足条件的数字。数组长度 [1,1000]。假设数组中的第一个数字为所求。
2024-08-23 20:17:08
311
1
原创 序列化二叉树
u用于记录当前遍历到的结点的首字符的位置;k用来记录当前遍历到的结点的尾字符的位置;将遍历到的字符转为对应数字,设置一个中间变量val,val=val * 10 + 当前遍历到的数字字符-‘0’,当首字符为n,说明当前需要构造空结点;当首字符为-,说明当前结点的值为负,需要将中间变量取负数;序列化二叉树:深度优先搜索遍历二叉树,当遇到空结点,在结果字符串的末尾加上null和空格;当遇到非空结点,将这个结点的值转为字符串,并在结果字符串的末尾加上null和空格。空格的作用是反序列化的时候分割字符串。
2024-08-22 21:54:09
351
原创 二叉树中和为某一值的路径
输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。保证树中结点值均不小于 0。
2024-07-02 00:11:11
202
原创 剪绳子(C++ 高数推导)
其实之前也有做过这个题,一直没去想为啥取3、2,那么多数字为啥选择你俩。今天看到推导,醍醐灌顶,就彻底懂了,高数真的是很神奇,第一次感觉到代码和数学有关系,有一个良好的数学思维真的很重要,自己压根想不到把它当做数学题解,这明明就是大一高数最简单的求极值问题啊。。。
2024-05-29 00:24:23
351
2
原创 矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条路径包含的字符按访问顺序连在一起恰好为给定字符串。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。注意:矩阵中元素的总个数 [0,900][0,900]。路径字符串的总长度 [1,900][1,900]。 二、思路以矩阵的每个元素为起点,开始搜索,如果能找到完整的str,说明true,否则false。搜索思路:用一个下标记录当前的str下标,
2024-05-27 22:32:14
432
原创 用两个栈实现队列
其实封装成方法是好的,使代码逻辑更清晰。其实三者的思路都一样,就是把原栈pop,push到新栈,新栈就是原栈的队列形式。都一样啦。
2024-05-26 22:08:27
488
原创 分组背包问题
做这道题,体会到了01背包的思想可以解决很多问题,对于物品的属性可以对v、w数组加维度,在每个分组中,使用01背包思想,保证每组只选择一个性价比最高的物品,或者不选物品。代码是按照大佬代码写的,思路是自己总结的,大佬的图还是不太能理解,所以用自己的思想把解决这道题的思路讲了出来。
2024-05-22 22:37:14
334
原创 混合背包问题(java and c++)
这两个代码逻辑相同,明显感受到c++语言输入输出的方便性,但是对于c++语言没有java语言熟练。刚开始看大佬思路一头雾水,用我的DEVC++打了两遍思路逐渐清晰,就转化为java代码,大佬的代码属实妙不可言,评论区全是666。
2024-05-20 23:07:43
228
原创 AcWing找出数组中重复的数字
给定一个长度为 n的整数数组nums,数组中所有的数字都在 0∼n−1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。:如果某些数字不在 0∼n−1 的范围内,或数组中不包含重复数字,则返回 -1;
2024-02-05 11:24:32
211
1
原创 归并排序求小和问题
小和问题在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。例子:[1,3.4,2,5]1左边比1小的数,没有;3左边比3小的数,1:4左边比4小的数,1、3;2左边比2小的数,1;5左边比5小的数,1、3、4、2:所以小和为1+1+3+1+1+3+4+2=16。
2024-01-21 23:40:01
449
1
原创 蓝桥杯算法训练字符串表达式
编写一个字符串表达式求解函数int expression(char* s);输入一个字符串表达式,返回它的结果。表达式长度不会超过100。表达式最少有一项,且以等号=结束。表达式中只包含加法和减法,且运算均在整数范围之内。编写main函数测试该函数的正确性。3257。
2024-01-20 14:44:36
369
原创 蓝桥杯算法训练P0805 大数乘法
为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过10位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过20位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.以上代码好理解 但是这里并未排除两个相乘的大数过小的情况 也就是最终结果的数组前面为零的情况 导致最终输出结果出错。将结果的小部分相加(进位)得到的结果即为乘法的结果。
2024-01-19 11:05:21
514
1
原创 数据结构排序算法之归并排序(JAVA)
归并排序是建立在归并操作上的一种有效的排序算法,通过将有序的子序列合并,得到完全有序的序列。其中归并操作也称为归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。
2024-01-18 22:52:44
403
1
原创 蓝桥杯练习系统算法训练——最大分解(java实现)
想做一道蓝桥题,又想学习一下贪心算法,就看到了这道题,感觉这是蓝桥练习系统中算法训练最简单的一道题了吧,算是贪心算法最简单的例题了(其他的题都读不懂),话不多说,记录一下自己的思路吧。
2023-11-09 20:21:52
129
1
原创 蓝桥杯历届真题 时间显示【第十二届】【省赛】【研究生组】java
闰年366天——被4整除不能被100整除或者能被400整除的年份。首先 去除整年 再去除整月 整日 最后输出此事件为新的一天的何时。平年365天——除了闰年以后的年份。
2023-10-13 23:19:12
214
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人