
力扣刷题
文章平均质量分 62
跟着Sunlightʊə一起刷题叭!
Sunlightʊə
长风一吹,野草就连了天
展开
-
JZ42连续子数组的最大和
遍历整个数组,每当遇到一个新元素时有两种情况,要么加上它会更大,要么加上它会更小。所以dp的状态转换应该为:dp[i] = Math.使用动态规划,这里用dp[]数组表示以下标i为终点的最大连续子数组和。原创 2023-08-28 15:30:52 · 254 阅读 · 0 评论 -
JZ41数据流在的中位数
首先对于中位数,我们都知道,排序后如果是数组长度是奇数,中位数就是中间的值,也就是n/2的值。如果数组长度是偶数,那么中位数就是中间两个值相加除2,也就是 a= n/2;中位数=(a+b)/2。这样看来我们需要一个排序后的数组,由题意可知这个数组不断在变长,如果增加一个元素排序一次未免不合理,那么我们这里直接使用插入排序。原创 2023-08-28 15:30:13 · 168 阅读 · 0 评论 -
JZ40最小的K个数
最简单的方法:排序后数组顺序是由小到大的,也就是说此时数组前k个数就是我们要求的结果。注意本题不需要去重。原创 2023-08-13 16:56:15 · 220 阅读 · 0 评论 -
JZ39数组中出现次数超过一半的数字
最简单用哈希表来记录每个数字在数组中出现的次数,在遍历这个数组时同时进行判断是否满足条件。原创 2023-08-13 16:55:36 · 143 阅读 · 0 评论 -
JZ38 字符串的排列
这里就要用到剪枝操作了,将整个数组排序后,相同元素必然相邻,在同一层的相同元素要进行剪枝操作,当vis[i-1]=false,相邻且arr[i-1]没有被访问过时,就表示当前是同一层。在本题中直接跳过arr[i]作为dfs开头的路径就ok。首先我们来说全排列,设置一个vis数组来记录当期元素是否被使用过,然后dfs遍历整个数组,列出所有符合条件的路径就是全排列。那么如果数组中有相同元素,将其作为路径开头是不是就会出现路径重复的问题呐?这里用到了全排列和剪枝。原创 2023-08-13 16:54:55 · 265 阅读 · 0 评论 -
JZ37序列化二叉树
进行反序列化的时候,首先处理空树的情况,也就是说如果字符串是”#“表示这是一个空树。首先,序列化就是将二叉树的节点值放入一个字符串中,这里可以按照前序遍历的思路来进行操作,谦虚遍历是:根左右的情况,其中根据题意我们用"#"来表示空节点,用!由于我们在序列化的时候采用的是前序遍历,因此在反序列化的过程中,我们也要采用前序遍历。在前序递归函数中,如果遇到非空节点会将其添加到str中,当然也包括表示节点与节点间分割的!首先处理空树的情况,在空树时,我们返回”#“,然后调用递归函数前序递归遍历二叉树。原创 2023-08-13 16:54:10 · 145 阅读 · 0 评论 -
JZ36二叉搜索树与双向链表
创建两个指针,一个指向head,一个指向当前遍历的前一个节点也就是pre。先找到双向链表的头也就是树的最左边节点,初始化head和pre。处理中间根节点,然后开始连接pre和当前节点,连接后将pre更新为当前的节点,根据左根右的顺序,处理完左子树和根节点,就递归进入右子树继续进行处理。由题目可知,这里的二叉搜索树转成双向链表的符合左根右的逻辑顺序,且是一个递增序列。在递归的过程中,递归的出口就是节点为空。原创 2023-08-13 16:52:17 · 170 阅读 · 0 评论 -
J35复杂链表的复制
如果我们将拷贝后的节点插入到原始链表相应节点的后面,这时连接随机节点时,原始链表随机指针的后一个元素就是原始链表的随机节点,该节点的后一个节点就是拷贝出的新节点。我们在创建节点的时候,可能当前节点创建了,但是当前节点的随机指针指向的节点还没创建,这种情况下,我们只能连接next指向的节点,而不能连接随机节点。这里我们采用双指针的方法。原创 2023-08-13 16:51:38 · 122 阅读 · 0 评论 -
JZ34二叉树中和为某一值的路径
从根节点开始向左右子树进行递归操作,在递归操作中要处理的是当前路径更新,目标值更新,最后如果当前结点是叶子结点就要判断这条路径是否符合题目要求,如果符合就加到结果里面。这里求的是和为某一值的路径,要用dfs算法,也就是说这里使用深度优先搜索算法。原创 2023-08-13 16:50:53 · 91 阅读 · 0 评论 -
JZ33二叉搜索树的后序遍历序列
我们使用一个栈来存储当前的输入数组,也就是说,栈中先出的是根结点,如果数组元素小于栈顶元素,就表明此时它是左子树的根,大于栈顶元素就是右子树的根。通读题目后,我们可以得出,二叉搜索树是左子节点小于根节点,右子节点大于根节点。符合要求就是true,否则就是false。栈的特点是:先进后出。原创 2023-08-13 16:49:58 · 144 阅读 · 0 评论 -
JZ32 从上往下打印二叉树(Java)
首先,队列是尾部插入,头部删除的一种数据结构。在遍历树的过程中使用层序遍历的话,是从根开始由左向右进行遍历的,那么我们在遍历树的时候将当前根的结点存入到队列中去,遍历到结点时将其从队列中删除,这样一来,队列poll方法获取的队列的头就是按从上到下顺序的。也就是我们要的结果。不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。原创 2023-08-12 22:37:11 · 244 阅读 · 0 评论 -
秋招备战笔试Day3
数组中出现次数超过一半的数字,字符串中找出连续最长的数字串原创 2023-08-10 17:27:30 · 254 阅读 · 0 评论 -
秋招备战笔试Day2
也就是说static定义的变量一定是静态成员变量。原创 2023-07-31 18:14:36 · 242 阅读 · 0 评论 -
秋招备战笔试Day1
/...//...//...首先这是一个叫Base的类,有不带参数的构造方法,带一个参数的构造方法,这里构成了重载。有一个fun方法,还有一个Child继承了Base类。选项中所有的方法全是fun的方法,也就是说这里要与父类的fun方法构成一个重写的关系,重写的特点是:1、必须是在继承里,2、方法名、返回值类型、参数个数和参数类型 都必须相同3、派生类重写的方法的访问权限不能低于基类的权限4、派生类抛出的异常应该和基类相等或比基类更小。原创 2023-07-29 19:46:57 · 232 阅读 · 0 评论 -
链表(一):移除链表元素、设计链表等力扣经典链表题目
那么,在第index个节点前添加节点的重要任务就是找到第index个节点的前一个节点(这样才能操作第index个节点)。给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。链表的删除操作如上图所示,我们需要先找到要删除的节点,但是要注意,在操作某一节点时,我们必须要知道它的前一个节点。在第 index 个节点之前插入一个新节点,例如index为0,那么新插入的节点为链表的新头节点。插入后,新节点将成为链表的第一个节点。原创 2023-02-26 21:02:18 · 591 阅读 · 3 评论 -
数据结构入门DAY1
我们可以想到,对于连续子数组的最大和,有两种递推公式:一种是maxAns(i-1)+nums[i]表示nums[i]加入当前连续子序列和。那么对于整个数组,我们可以求出在每个位置的maxAns(i),然后在这些maxAns(i)中选出最大的那个连续子数组的最大和。其次,当我们将这个数组进行排序后,我们会发现,相同的元素一定是相邻的,所以我们也可以采用排序的方法来解决这道题。这样的话,我们只需要将数组排序后,遍历数组,寻找下标为i的元素与下标为i+1的元素是否相同即可(注意,这里的i从0开始)。原创 2023-02-26 19:41:17 · 268 阅读 · 0 评论 -
数组:二分查找、移除数组等经典数组题
每一轮迭代,将 nums[end]加到 sum,如果 sum≥s,则更新子数组的最小长度,然后将 nums[start] 从 sum 中减去并将 start 右移,直到 sum原创 2023-02-25 16:29:31 · 415 阅读 · 0 评论