随笔分类 -  算法

摘要:二叉树 110. 平衡二叉树 参考:代码随想录 思路 二叉树的深度:从根节点出发到该节点的最长简单路径边的条数。 二叉树的高度:从该节点出发到叶子节点的最长简单路径的条数。 题目要求判断是否是高度平衡的二叉树, 那么就是二叉树高度的问题,既然是求高度问题使用后序遍历。 递归 递归函数的参数和返回值: 阅读全文
posted @ 2022-10-12 23:44 neil_liu 阅读(44) 评论(0) 推荐(0)
摘要:二叉树的深度与高度 二叉树的深度:从根节点到该节点的最长简单路径边的条数或节点数(取决于深度是否从1开始) 二叉树的高度:从该节点到叶子节点的最长简单路径边的条数或节点数(取决于高度是否从1开始) 104.二叉树的最大深度 参考:代码随想录 思考 根据二叉树深度和高度的定义可知根节点的高度就是二叉树 阅读全文
posted @ 2022-10-12 00:55 neil_liu 阅读(33) 评论(0) 推荐(0)
摘要:二叉树 226. 翻转二叉树 参考:代码随想录 思路 翻转二叉树的方式: 递归 迭代法 层序遍历 1.递归 前序遍历 /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNod 阅读全文
posted @ 2022-10-11 01:23 neil_liu 阅读(51) 评论(0) 推荐(0)
摘要:二叉树的遍历 144. 二叉树的前序遍历 参考:代码随想录-二叉树的递归遍历 参考:代码随想录-二叉树的迭代遍历 参考:代码随想录-二叉树的迭代遍历统一写法 思路-递归法 二叉树的前序遍历是中左右的顺序,最常用的遍历方式是递归法。 总结递归法分三个步骤: 确定递归函数的参数与返回值:本题递归参数是当 阅读全文
posted @ 2022-10-10 23:11 neil_liu 阅读(39) 评论(0) 推荐(0)
摘要:栈与队列 150. 逆波兰表达式求值 参考:代码随想录 思路 根据提示,逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。那么可以使用栈来处理逆波兰表达式的计算。 当当前的字符是符号时,依次取出栈顶的2个元素。并根据符号进行运算,将计算后的结果插入回栈顶,继续向下运算。 func evalR 阅读全文
posted @ 2022-10-10 00:35 neil_liu 阅读(29) 评论(0) 推荐(0)
摘要:栈与队列 232.用栈实现队列 参考:代码随想录 思路 一道模拟题,不涉及到算法部分。如果想用栈来实现队列,至少需要2个栈,一个输入栈一个输出栈。 在进行push操作时,将数据放入到输入栈中。 在进行pop操作时,将数据从输出栈中取出,如果输出栈为空时,则将输入栈的数据全部放入输出栈。 如果输入栈和 阅读全文
posted @ 2022-10-09 01:10 neil_liu 阅读(24) 评论(0) 推荐(0)
摘要:字符串 459. 重复的子字符串 参考:代码随想录 思考 判断一个字符串s是否包含子串,可以将2个s首尾相连,组合成t=s+s(剔除首尾字符),如果字符串s存在字串,那么t一定存在字符串s。 例如,一个字符串由abab组成,那么组合后是abababab,去掉首尾之后bababa,那么字符串中依然存在 阅读全文
posted @ 2022-10-07 23:24 neil_liu 阅读(31) 评论(0) 推荐(0)
摘要:字符串(KMP算法) 28. 找出字符串中第一个匹配项的下标 参考:代码随想录 思考 一道简单的字符串单模匹配的题目。 使用暴力匹配,时间复杂度O(m*n)。 func strStr(haystack string, needle string) int { m, n := len(haystack 阅读全文
posted @ 2022-10-04 22:44 neil_liu 阅读(20) 评论(0) 推荐(0)
摘要:字符串 344.反转字符串 参考:代码随想录344.反转字符串 思考 题目要求在原地反转字符串,既然是原地反转那么可以第一时间想到双指针,一个指针指向头部,一个指向尾部,互换元素。 func reverseString(s []byte) { left, right := 0, len(s)-1 f 阅读全文
posted @ 2022-09-29 23:56 neil_liu 阅读(32) 评论(0) 推荐(0)
摘要:哈希表(二) 454.四数相加 II 参考:代码随想录454.四数相加 思路 题目中给出了四个长度相同数组,并且要求求出组成结果为0的四元组。答案可以包含重复的四元组。 先使用哈希表 key存储数组1和数组2的2个数之和,value存储数组1和数组2的2个数之和出现的次数 遍历数组3和数组4在哈希表 阅读全文
posted @ 2022-09-28 00:10 neil_liu 阅读(126) 评论(0) 推荐(0)
摘要:哈希表 ##242.有效的字母异位词 参考:代码随想录242.有效的字母异位词 看完题目的第一想法 本题最直接的做法就是两层for循环,暴力解题,时间复杂度O($n^2$)。 因为题目只包含小写字母,那么可以通过一个大小为26的数组来解决。 数组的每一位存储一个小写字母,先遍历s每出现一个单词就令数 阅读全文
posted @ 2022-09-26 23:19 neil_liu 阅读(255) 评论(0) 推荐(0)
摘要:链表 24. 两两交换链表中的节点 参考:代码随想录24. 两两交换链表中的节点 看完题目的第一想法 两两交换链表中的节点其实就是改变链表节点之间的指针 将第二个节点的Next指针指向第一个节点 第一个节点的指针指向第三个节点,后面依次重复此操作, 那么就可以使用递归来求解: 设递归函数是swapP 阅读全文
posted @ 2022-09-25 17:58 neil_liu 阅读(505) 评论(0) 推荐(0)
摘要:链表 203. 移除链表元素 参考:代码随想录203.移除链表元素 看完题目的第一想法 一道基本的链表题目,遍历链表如果当前节点的下一个节点值等于 val,那么就将当前节点的 Next指针指向下下一个节点。 如果要删除的值刚好位于头部,由于单链表没有指向头结点的指针,那么就需要单独处理头结点。 /* 阅读全文
posted @ 2022-09-24 01:23 neil_liu 阅读(656) 评论(0) 推荐(0)
摘要:数组 977. 有序数组的平方 参考:代码随想录977.有序数组的平方 看完题目的第一想法 根据题意直接每个元素求平方,然后排个序,提交。时间复杂度O($nlogn$)。 func sortedSquares(nums []int) []int { for i, num := range nums{ 阅读全文
posted @ 2022-09-22 23:56 neil_liu 阅读(838) 评论(0) 推荐(0)
摘要:数组 704.二分查找 参考代码随想录704.二分查找 看完题目的第一想法 一道很基础的二分查找题目,直接使用左闭右闭区间的方式开撸 func search(nums []int, target int) int { left, right := 0, len(nums)-1 for left <= 阅读全文
posted @ 2022-09-21 23:45 neil_liu 阅读(92) 评论(0) 推荐(0)