01背包问题 Golang实现
摘要:背包问题的分类: 01 背包描述: 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 思路分析: 问题核心: 从给定的 𝑛 个物品中,以背包容量 𝑉为约束,寻找一种选择方
阅读全文
96. 不同的二叉搜索树 && 343. 整数拆分 Golang实现
摘要:这两个题目的分析思路是十分类似的。都是进行一个拆分。 1.不同的二叉搜索树 题目描述: 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3 输出:5 思路分析: 动态规划分析: 确定状态:
阅读全文
62.不同路径 DP动态规划 Golang实现
摘要:题目描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 输入:m = 3, n = 7 输出:28 示例 2: 输入:m
阅读全文
617. 合并二叉树 Golang实现
摘要:题目描述: 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作
阅读全文
98.验证二叉搜索树 Golang实现「自顶向下」
摘要:题目描述: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 输入:root = [5,1,4,null,null,3
阅读全文
105. 从前序与中序遍历序列构造二叉树 Golang实现
摘要:题目描述: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 思路分析: 其实每次遍历就是划分左右子树数组,然后同样的递归先得到左右子树的根节点,再依次划分即可。注意下标索引的写
阅读全文
257. 二叉树的所有路径 Golang实现
摘要:题目描述: 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 输入:root = [1,2,3,null,5] 输出:["1->2->5","1->3"] 思路分析: 这个题一眼回溯,回溯和递归其实也是紧密相关的。 1.确定回溯
阅读全文
107. 二叉树的层序遍历 II Golang实现
摘要:题目描述: 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 输入:root = [3,9,20,null,null,15,7] 输出:[[15,7],[9,20],[3]] 思路分析: 这个题主要还是二叉树的层序遍历问
阅读全文
144. 二叉树的遍历「前序、中序、后序」 Golang实现
摘要:题目描述: 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 思路分析: 递归法: 前序遍历的顺序是中左右的顺序。那么每个子树都是这个顺序,所以可以使用递归进行遍历。递归遍历有3部曲 1.确定递归函数的参数和返回值。 因为返回值要求保存在一个数组中,所以递归函数的参数应该包括树的根节点和
阅读全文
456. 132 模式 Golang实现
摘要:题目描述: 给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。 如果 nums 中存在 132 模式的子序列
阅读全文
92. 反转链表 II Golang实现
摘要:题目描述: 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 思路分析: 没到指定的位置范围时,直接进行链表的链接,然后到了需要转换的范围就将这些节点用一个栈保存
阅读全文
142. 环形链表 II Golang实现
摘要:# 题目描述: 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始
阅读全文
148. 排序链表 Golang实现
摘要:# 题目描述: 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 要求时间复杂度为O(nlogn) ## 思路分析: 按要求需要使用归并排序。那么归并排序的思路是分治的思想,如下图所示: 简单说下思路:先将每次将链表划分成两个部分,直到不能划分【递归】,然后对两个链表进行排
阅读全文
160. 相交链表 Golang实现
摘要:题目描述: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 注意这里的相交节点表示的是值和物理位置都相同的节点,不仅仅是值相同。 思路分析: 假设链表A和链表B的长度分别为lenA和lenB,这个方法的奇妙
阅读全文
28. 找出字符串中第一个匹配项的下标 Golang实现
摘要:题目描述: 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入:haystack = "sadbutsad
阅读全文
131.分割回文串 Golang实现
摘要:题目描述: 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串。返回 s 所有可能的分割方案。 示例 1: 输入:s = "aab" 输出:[["a","a","b"],["aa","b"]] 思路分析: 回溯法的特点: 回溯法是一种逐步递归构建解决方案,并在发现某一步没有满足条
阅读全文
30. 串联所有单词的子串 Golang实现
摘要:题目描述: 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同 。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words = ["ab","cd","ef"], 那么 "abcdef", "abefcd"
阅读全文
76.最小覆盖子串 Golang实现
摘要:题目描述: 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果 s 中存在这样的子串,我们保证它是唯一
阅读全文
滑动窗口问题总结
摘要:适用范围 1、一般是字符串或者列表 2、一般是要求最值(最大长度,最短长度等等)或者子序列 算法思想 1、在序列中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个窗口。 2、先不断地增加 right 指针扩大窗口 [left,
阅读全文
3. 无重复字符的最长子串 Golang实现
摘要:题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。 注意区分子串和子序列。 示例 3: 输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子
阅读全文