算法与数据结构
文章平均质量分 75
Leetcode及剑指Offer刷题中遇到的算法与数据结构总结
HaoTianYan
CVer, Super Resolution.
展开
-
【背包九讲(二)】完全背包问题
文章目录1. 完全背包问题1.0 题目1.1 解法一(不建议)代码1.2 解法二代码1. 完全背包问题1.0 题目有 NNN 种物品和一个容量是 VVV 的背包,每种物品都有无限件可用。第 iii 种物品的体积是 viv_ivi,价值是 wiw_iwi。求解: 将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出该最大价值。【输入格式】第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第原创 2021-04-26 11:06:51 · 219 阅读 · 0 评论 -
【背包九讲(一)】01背包问题
文章目录1. 基础的01背包问题1.1 解题方法一(二维)解题思路1代码11.2 解题方法二(优化至一维)解题思路2代码22. 变型的01背包问题解题思路代码1. 基础的01背包问题有 NNN 件物品和一个容量为 VVV 的背包。第 iii 件物品的体积是 w[i]w[i]w[i],价值是 v[i]v[i]v[i] ,求将哪些物品装入背包可使价值总和最大。【输入格式】第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第原创 2021-04-25 21:21:16 · 278 阅读 · 1 评论 -
【Leetcode_1143】最长公共子序列(LCS)
文章目录1. 题目2. 解题思路3. 代码(Java)1. 题目给定两个字符串 text1 和 text2,返回这两个字符串的 最长公共子序列的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示原创 2021-04-16 14:30:39 · 207 阅读 · 0 评论 -
【Leetcode_300】最长递增子序列(LIS)
文章目录1. 题目描述2. 解题思路2.1 定义状态 `dp[i]`2.2 状态转移方程2.3 初始化2.4 输出3. 代码(Java)4. 优化1. 题目描述LeetCode 300. 最长递增子序列最长递增子序列(LIS)和最长公共子序列(LCS)都是典型的动态规划问题。题目:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7]原创 2021-04-16 11:45:05 · 134 阅读 · 0 评论 -
【Leetcode 153、154、33、81、35】二分实现旋转数组问题【Java】
文章目录0. 二分法0.1 用二分的两个前提0.2 步骤0.3 注意事项154. 寻找旋转排序数组中的最小值 II1. 解题思路2. 代码(Java实现)153. 寻找旋转排序数组中的最小值35. 搜索插入位置代码33. 搜索旋转排序数组代码81. 搜索旋转排序数组 II解题思路代码旋转数组:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转0. 二分法0.1 用二分的两个前提【顺序存储】比如说数据存放在数组中,可以用索引 O(1) 时间内查找到数据;【有序】数组中原创 2021-04-15 21:09:59 · 103 阅读 · 0 评论 -
【Leetcode_1190】反转每对括号间的子串【Java实现】
0. 题目1190. 反转每对括号间的子串给出一个字符串 s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结果中 不应 包含任何括号。示例1:输入:s = "(abcd)"输出:"dcba"示例 2:输入:s = "(u(love)i)"输出:"iloveu"示例 3:输入:s = "(ed(et(oc))el)"输出:"leetcode"示例 4:输入:s = "a(bcdefghijkl(m.原创 2021-04-14 22:40:33 · 402 阅读 · 0 评论 -
【剑指Offer_33】二叉搜索树的后序遍历序列【Java实现】
文章目录0. 题目1. 解法一:递归分治?为什么递归终止条件是 `i >= j` 而不是 `i==j` 呢情况1:左右两个叶子节点都在情况2:只有左叶子节点综上所述,递归的终止条件应该为 `i >= j` 。0. 题目剑指 Offer 33. 二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5 / \ 2 6原创 2021-04-14 00:21:18 · 80 阅读 · 1 评论 -
【Leetcode刷题】二叉树的前序、中序、后续遍历(非递归)【Java实现】
文章目录0. 整体思路1. 二叉树的前序遍历(非递归)2. 二叉树的中序遍历(非递归)3. 二叉树的后序遍历(非递归)0. 整体思路用非递归的方法解决二叉树的三种遍历问题,主要思想其实就是利用了栈,将暂时用不到的TreeNode节点存起来,先沿着某一分支(left或者right)走下去,等到了叶子节点(root==null)时再依次pop出来赋给root。二叉树结点TreeNode的定义:/** * Definition for a binary tree node. */public c原创 2021-04-13 21:04:05 · 186 阅读 · 0 评论