- 博客(12)
- 收藏
- 关注
原创 代码随想录第五十八期day14
解析:本题比较简单,一个递归就可以搞定,分析题目可以知道就是相当于是在这个二叉树的右边画一个对称轴,然后二叉树沿着对称轴翻转就行,值得注意的是,不是单纯的交换两个节点的值,而是要交换两个节点,基于此,我们可以先遍历得到节点,然后再交换他的左右孩子,接下来一直递归,就能得到翻转的二叉树具体可以参考这篇博文。输入:root = [2,null,3,null,4,null,5,null,6]输入:root = [1,2,2,null,3,null,3]输入:root = [1,2,2,3,4,4,3]
2025-04-11 16:46:25
1661
原创 代码随想录第五十八期day13
解析:本题递归算法很简单,所以用一个递归就能完成,写递归时要注意终止条件,不能写成没用终止条件的递归,本题终止条件就是当节点为空时候,就结束递归。输入:root = [1,2,3,4,5,null,8,null,null,6,7,9]输入:root = [1,2,3,4,5,null,8,null,null,6,7,9]输入:root = [1,null,2,3]输出:[1,2,4,5,6,7,3,8,9]输入:root = [1,null,2,3]输出:[4,6,7,5,2,9,8,3,1]
2025-04-02 15:00:04
898
原创 代码随想录第五十八期day11
对于push来说,我们要保持他单调的话,必须要用while,因为里面不止执行一次,所以当单调队列不为空并且要加入到值大于单调队列最右边的值时候就一直这样找,直到找到小于的地方,才不把里面元素弹出,把要加入的元素加入。首先我们先实现单调队列,cpp构造一个类,重置里面pop,push方法,对于pop来说,只要单调队列不为空,并且要删除的值等于单调队列里面的最左边的值(即最大值)就可以删掉它了。如果都不是,那么不用执行任何操作。输入:tokens = [“10”,“6”,“9”,“3”,“+”,“-11”,“
2025-04-01 15:51:07
568
原创 代码随想录带刷day10
例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。解析:本题题目描述不明确,导致有些情况没想到,初始时看测试用例,感觉可以hash来做,这样能大大节约时间,但是,最后发现测试用例没过,之后去看了。你所使用的语言也许不支持栈。题目描述:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。题目描述:给出由小写字母组成的字符串 s,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
2025-03-24 17:04:37
711
原创 代码随想录第五十八期day09
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。进阶:如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用 O(1) 额外空间复杂度的 原地 解法。s 中使用至少一个空格将字符串中的 单词 分隔开。解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。题目描述:给你一个字符串 s ,请你反转字符串中 单词 的顺序。解释:反转后的字符串中不能存在前导空格和尾随空格。
2025-03-24 14:36:42
326
原创 代码随想录第五十八期day08
解析:本题中,重点就是空间不能是o(N),不然直接开辟大小一样的数组空间,倒序遍历加入新空间即可。题目描述:给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“h”,“a”,“n”,“n”,“a”,“H”]输出:[“o”,“l”,“l”,“e”,“h”]输入:s = “abcd”, k = 2。
2025-03-24 12:10:37
331
原创 代码随想录第五十八期day07
解析:本题中重点在于要找到的是不重复的三元组,使得他们和为0,然后输出这些三元组,对于这个问题,我们可以用双指针法来解决,即先给原来的数据排序,再用一个指针来遍历,其余两个指针left,right来查抄所符合条件的三元组,和大了就right–,和小了就left++;输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]输入:nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0]
2025-03-24 10:52:20
1571
原创 代码随想录第五十八期day06
分析:注意到提示里面的数组长度不超过1000,并且里面的值也不超过1000,基于此,就是天生的hash算法,我们可以定义一个长度为1005的数组,再把num1里面遍历到的值当做新定义的数组的下标,在从新数组里面对应做标记,就能实现标记那些值在nums1里面,nums2也是同样操作。题目解析:本题最快思路就是hash映射,对于题目所存储的都是小写字母,联想到计算机内所有的其实都是二进制表示,所以对于字母和字符都有一个对应的数字转换表,名叫ASCII码,输出结果中的每个元素一定是 唯一 的。
2025-03-18 15:26:23
1501
原创 代码随想录第五十八期day04(补)
为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。解析:按照题意,就是两两交换相邻的两个节点(注,是交换节点,而不是单纯的交换两个节点里面的数值即可,要保持值所在地址不变)遇到这种,我们可以用双指针来解决,然后加一个临时指针去先保留以前的位置,防止交换后找不到原来的链表,具体可找Carl哥视频学习。题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
2025-03-18 13:55:26
580
原创 代码随想录第五十八期day3
题目解析:就是在链表里面找到目标值删掉,然后返回新链表即可,但是在处理时发现可能的方法有很多,就像上面给的事例一样,这时为了统一成一样的操作,我们可以虚拟出一个头节点,然后从虚拟头节点后面去操作,就能省略有删除头节点,而导致头节点一直在变,使得不好找头节点的问题。题目描述:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
2025-03-17 12:10:19
801
原创 代码随想录第58期day02
分析:题意为在一个数组中找到最小连续的字数组的和大于等于target,那么就有很多种可能了,可能之前的数都很小,但是刚好遇到一个大数(大数大于等于target)使得和大于等于target,那么此时最小字数组长度应该是1,由此,本题我们可以用滑动窗口思想来解决,附带。,用双指针的思想来解决。输入:target = 11, nums = [1,1,1,1,1,1,1,1]输入:target = 7, nums = [2,3,1,2,4,3]输出:[[1,2,3],[8,9,4],[7,6,5]]
2025-03-13 21:59:22
368
原创 代码随想录第58期day01
原理就是定义两个指针,一个为快指针,一个为慢指针,快指针先遍历,再从里面写一个判断语句,如果数组值与目标值不相等,那么就可以把快指针对应的元素值复制到慢指针对应的数组的位置,这样就能实现与目标值相等的元素能被覆盖,以此完成两重for循环完成的任务,代码如下:`解析:这题还没看双指针怎么解,我用了暴力解,我的思路如下,注意到nums[i]的最大值为10^4 ,数组空间最大也是这么多,就想到用hash映射到重新开辟的数组里面,在遍历新数组里面对应的值,来实现求他的下标的平方存在数组里面,以至于排好序。
2025-03-12 19:06:40
777
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅