- 博客(11)
- 收藏
- 关注
原创 算法day14-二叉树遍历
写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历。给定一个二叉树的根节点 root ,返回 它的 中序 遍历。给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
2023-02-24 17:01:29
88
原创 算法day13-队列
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值。239. 滑动窗口最大值。
2023-02-23 16:38:09
87
原创 算法day11
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在完成所有重复项删除操作后返回最终的字符串。在 S 上反复执行重复项删除操作,直到无法继续删除。解法二:直接用字符串作为栈,减少了栈转为字符串的操作。由于栈结构的特殊性,非常适合做对称匹配类的题目。每个右括号都有一个对应的相同类型的左括号。1047. 删除字符串中的所有相邻重复项。左括号必须用相同类型的右括号闭合。
2023-02-22 15:19:43
93
原创 算法day10
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。请你仅使用两个栈实现先入先出队列。
2023-02-21 12:52:59
82
原创 算法day8
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。编写一个函数,其作用是将输入的字符串反转过来。请实现一个函数,把字符串 s 中的每个空格替换成"%20"。给你一个字符串 s ,请你反转字符串中 单词 的顺序。
2023-02-16 14:57:06
32
原创 算法day7
当三个元素之和大于0时,表示和过大,因为数组是排序过的,所以应该右指针向前移动一位,让右指针的元素的值减小,使得和减小;再遍历数组1,2,将和对应的位置进行计数;解法:双指针解法,与三数之和的思路相同,都是左右指针同时向中间收缩,不同的是,在当前元素的for循环之外再加上一层for循环,即a=当前元素,b=a+1,left=b+1,right=nums.size()-1。三个元素,一个当前数组元素的下标,一个左指针(当前元素的下一个元素的下标),一个右指针(数组的最后一个元素的下标);
2023-02-07 16:34:58
146
原创 算法day6
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。编写一个算法来判断一个数 n 是不是快乐数。
2023-01-31 18:06:53
65
原创 算法day4-力扣24-力扣19-力扣160-力扣142
解法-可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。解法-curA指向链表A的头结点,curB指向链表B的头结点,然后我们求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置。从头结点出发一个指针,从相遇节点 也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是 环形入口的节点。
2023-01-17 18:18:14
115
原创 算法day3-力扣203-力扣707-力扣206
假设链表中的所有节点都是 0-index 的。虚拟头节点-创建一个新的虚拟头节点指向原链表的头节点,while循环判断下一个节点是否为空,再if判断下一个节点的值是否是需要删除的元素,如果是的话,则将当前节点指向的下一个节点改为下下一个节点,同时删除下一个节点。最后链表的头节点改为原链表 的头节点,同时删除虚拟头节点。关键是初始化的地方,可能有的同学会不理解, 可以看到双指针法中初始化 cur = head,pre = NULL,在递归法中可以从如下代码看出初始化的逻辑也是一样的,只不过写法变了。
2023-01-14 17:42:37
170
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人