- 博客(23)
- 收藏
- 关注
原创 代码随想录之二叉树层序遍历
本题两个循环条件,一个是队列不为空,另一个是当前层的元素个数。难点:循环判断条件的确立,需要什么一个条件进入循环。1、使用队列(queue)来模拟层序遍历。
2023-10-28 10:45:26 39
原创 代码随想录之《二叉树》迭代遍历(统一迭代法)
栈这种先入后出的思考方式是就很像计算机,如果遍历到一个元素是要在最后一个输出的,那就将他压入栈中,最后才输出。1、记住如果你想计算机按照你的思路去输出元素,一定要按照计算机的思考方式。2、将要处理的节点放入栈后,加一个空指针标记他(往栈里加入NULL)。
2023-10-26 09:08:35 36
原创 代码随想录之二叉树理论基础
(1)二叉树的种类:1、满二叉树 2、完全二叉树 3、平衡二叉树 4、平衡二叉搜索树。(2)二叉树的存储方式:链式存储和线性存储。(3)遍历方式:前中后序遍历。
2023-10-24 08:37:49 47
原创 代码随想录之队列《滑动窗口最大值》
往单调队列插入元素——push,因为单调队列强调单调递增或递减,本题是单调递增,所以要判断数组的值,如果要插入的值大于队列入口元素的值,弹出入口元素,直到push的数值小于等于队列入口元素为止。弹出元素——pop:比较队列出口元素是否等于pop值,如果相等,则弹出来。方法:维护一个单调队列,这个单调队列是单调递增或单调递减。目的:最终输出每次滑动窗口的最大值。这是重点,本题就围绕这个思路展开。
2023-10-19 09:55:26 29
原创 代码随想录之栈《逆波兰表达式求值》
如果使用人类常用的中缀表达式:(2+1)x3,计算机需要对符号进行优先级判断,对于计算机来说是有点麻烦的。所以计算机利用栈的特性,这种后缀表达式对计算机的开销也小很多。在进行算术运算时,["2","1","+","3","*"],这种后缀表达式对于计算机的思考是非常友好的。这道题很好的理解计算机的思考方式。
2023-10-18 09:11:41 38 1
原创 代码随想录之栈《删除字符串中所有相邻重复项》
back:输出字符串最后一个元素,但不移出。重点:完全匹配类的题目可以第一时间想到栈。push_back:往字符串后面插入元素。pop_back:移出字符串最后一个元素。第二种解法:用字符串模拟栈的操作。第一种解法:直接用栈。
2023-10-17 08:31:41 47 1
原创 代码随想录之栈《有效的括号》
1、审题错误,以为是只要找到匹配的括号就好,原来是要括号完整的匹配,比如“()、[]、{}”2、完全匹配类的题目可以用栈来解决,利用先进后出的天然优势。empty:判断栈是否为空。push:往栈插入元素。top:输出栈顶元素。pop:弹出栈顶元素。
2023-10-14 10:58:24 38 1
原创 代码随想录之《队列模拟栈》
用一个队列模拟栈,比如给出出栈的第一个元素,模拟出栈行为,就是给出队列最后一个进的元素。将最后一个元素前面的元素全部弹出并添加到最后一个元素后面,这样就模拟了出栈。1、队列特性:先进先出;
2023-10-14 10:14:36 41 1
原创 代码随想录之《用栈实现队列》
栈是先进后出结构,队列是先进先出。两者因为其结构的特性,不能实现遍历功能,也就不提供迭代器完成遍历。栈和队列都不是容器,都是利用底层容器来完成其行为,所以栈和队列都是容器适配器。用两个栈实现队列,一个栈是入栈,另一个是出栈。本题考察的是对栈和队列的特性的掌握。empty():判断是否为空。
2023-10-08 08:42:08 36 1
原创 代码随想录之《链表相交》
而且,一开始判断条件为(curA->val==curB->val),这样会有测试用例不通过。因为本题判断的是节点本身是否相等,而不是节点的值是否相等。一开始做这题,我没有给lenA和lenB赋初始值,导致出现runtime error。
2023-10-04 10:18:39 35 1
原创 代码随想录之《两两交换链表中的节点》
对链表节点操作之前,一定要先创建临时变量保存链表元素,比如我想交换有三个元素的链表,在交换前两个元素时,一定要保存第三个元素。如果不保存,会出现空指针异常,交换后的节点没法指向第三个节点,因为链表的交换操作就像一个断链然后又接链的一个过程。
2023-09-30 10:53:28 109
原创 代码随想录之双指针《移除元素》
从题目我们要想到数组的特性:1、数组在内存中的地址是连续的,也就是说,当我们增加或删除元素时,难免要移动数组中其他元素。比如12345,我要删除3,就要把45都前移一位。所以数组中的元素是不能删除的,而是覆盖。删除操作其实就是把要删除的元素覆盖掉,数组大小仍然不变。使用erase可以直接实现删除元素的目的,但本题直接erase就能ac,显然不是考察数组的目的。
2023-09-17 11:07:13 42 1
原创 代码随想录之哈希表《赎金信》
ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成。如果可以,返回true;否则返回false。magazine中的每个字符只能在ransomNote中使用一次。分析题目:判断一个字符是否出现在另一个集合中,就可以考虑用哈希表。题目中“判断ransomNote能不能由magazine里面的字符构成。”跟判断字母异位那题很相似,只不过这个要查找多个字符。
2023-09-13 09:14:53 33
原创 代码随想录之哈希表《快乐数》
但是判断是否为快乐数的过程中,我们需要查找是否有重复元素出现过,有则返回false。unordered_set能解决这个问题。一旦读题发现,一个元素是否出现在集合里,就要考虑用哈希法了。前面的总结提到过,使用数组查找元素,要尽可能在一个确定的范围内,本题n值一直变化,且变化的范围太大,数组面对这么大差值的元素,需要开辟很多控件存放元素,造成极大的空间浪费,属实没必要。为什么用unordered_set呢?题目中也没有要求查找元素呀。
2023-09-07 09:26:15 48 1
原创 代码随想录之哈希表《两个数组的交集》
因为本题没有限制元素的大小,数值大小的限制,而上一题“有效的字母异位词”中,元素大小限制在了26位小写字母,所以使用数组会合适。但是本题没有限制大小,如果数值之间相差较大,比如“0,5,10000”,数组需要开辟到10000个内存去存储这些数,空间浪费极大。从读写效率角度来看,unordered_set既不对数据进行排序,也不会数据重复,读写效率最高。总结两个字就是:“去重”,前两种数据结构允许有重复元素输出,而unordered_set会自动帮你去重,多个相同元素存在时只存放一个元素。
2023-09-06 09:03:03 35 1
原创 leetcode 剑指offer 05、替换空格
从后向前操作的好处:1、不用像从前向后,每次都得给数组开辟新的空间,每次添加元素,添加元素后面的数组中的元素都得往后移位。数组填充类问题,可以预先给数组扩容到填充数组后的大小,用resize函数,然后从后向前操作。解题方法:双指针法,从后向前替换空格。2、不用申请新数组。
2023-08-02 21:26:22 67
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人