数据结构与算法
文章平均质量分 91
xylitolz
Ta很懒,还没有添加简介
展开
-
高级数据结构:线段树
文章目录为什么要使用线段树?什么是线段树(SegmentTree)?创建线段树线段树的查询线段树中的更新操作More线段树相关问题Reference为什么要使用线段树?对于有一类问题,我们关心的是线段(或者区间)最经典的线段树问题:区间染色有一面墙,长度为nnn,每次选择一段墙进行染色,mmm次操作后,可以看见多少种颜色?mmm次操作后,可以在区间[i,j][i,j][i,j]内看见多少种颜色?使用数组实现染色操作(更新区间)O(n)O(n)O(n)查询操作(查询区原创 2022-04-17 00:32:14 · 414 阅读 · 0 评论 -
差分:区间修改与查询问题
文章目录一维差分概念差分的局限性二维差分概念用差分数组的递推公式求前缀和直接计算前缀和复杂度差分是一种处理数据的巧妙而简单的方法,它应用于区间的修改和询问问题。把给定的数据元素集A分成很多区间,对这些区间做很多次操作,每次操作是对某个区间内的所有元素做相同的加减操作,若一个个地修改这个区间内的每个元素,非常耗时。引入差分数组D,当修改某个区间时,只需要修改这个区间的“端点”,就能记录整个区间的修改,而对端点的修改非常容易,是O(1)O(1)O(1)复杂度的。当所有的修改操作结束后,再利用差分数组,计算出转载 2022-03-09 16:48:21 · 998 阅读 · 0 评论 -
高级数据结构并查集详解
文章目录并查集(Union Find)定义基本的数据表示接口定义版本一:Quick Find初始化isConnectedUnion时间复杂度分析版本二:Quick Union基本思想Quick Union下的数据表示UnionisConnected时间复杂度分析版本三:Quick Union基于size的优化版本四:Quick Union基于rank的优化版本五:路径压缩Path Compression版本六:利用递归优化路径压缩时间复杂度分析应用Reference并查集(Union Find)定义孩原创 2022-02-20 16:59:20 · 324 阅读 · 1 评论 -
由vector的size()函数引发的越界问题
在做剑指 Offer 04. 二维数组中的查找一题时,如下代码:class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { int i = matrix.size() - 1, j = 0; while (i >= 0 && j <= matrix[0].size() - 1) {转载 2022-01-16 11:16:41 · 433 阅读 · 1 评论 -
常用排序算法总结
文章目录冒泡排序(Bubble Sort)插入排序(Insertion Sort)选择排序(Selection Sort)归并排序(Merge Sort)快速排序(Quick Sort)[剑指 Offer 40. 最小的k个数](https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/)[215. 数组中的第K个最大元素](https://leetcode-cn.com/problems/kth-largest-element-in-an-arra原创 2021-03-25 20:37:50 · 184 阅读 · 0 评论 -
二分查找:思路很简单,细节是魔鬼
文章目录1. 简介2. 最简单的二分查找3. 4种常见的二分查找变形问题3.1 查找第一个值等于给定值的元素3.2 查找最后一个值等于给定值的元素3.3 查找第一个大于等于给定值的元素3.4 查找最后一个小于等于给定值的元素Reference1. 简介二分查找(Binary Search)算法,也叫折半查找算法,二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0二分查找的时间复原创 2021-03-22 22:35:19 · 6201 阅读 · 2 评论 -
动态规划:分组背包问题
文章目录往期题目解题思路空间优化Reference往期01背包问题完全背包问题多重背包问题I多重背包问题II混合背包问题二维费用背包问题题目分组背包问题有 NNN 组物品和一个容量是 VVV 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vijv_{ij}vij,价值是 wijw_{ij}wij,其中 iii 是组号,jjj 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个原创 2020-12-12 23:22:42 · 1414 阅读 · 0 评论 -
动态规划:二维费用的背包问题
文章目录题目解题思路优化空间复杂度Reference题目二维费用的背包问题有 NNN 件物品和一个容量是 VVV 的背包,背包能承受的最大重量是 MMM。每件物品只能用一次。体积是 viv_{i}vi,重量是 mim_{i}mi,价值是 wiw_{i}wi。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,MN,V,MN,V,M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大原创 2020-12-06 19:04:45 · 1659 阅读 · 2 评论 -
动态规划:混合背包问题
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录题目解题思路Reference题目混合背包问题有 NNN 种物品和一个容量是 VVV 的背包。物品一共有三类:第一类物品只能用1次(01背包);第二类物品可以用无限次(完全背包);第三类物品最多只能用 sis_{i}si 次(多重背包);每种体积是 viv_{i}vi,价值是 wiw_{i}wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两原创 2020-12-05 18:56:02 · 447 阅读 · 0 评论 -
动态规划:多重背包问题II
文章目录题目解题思路多重背包的二进制优化Reference题目多重背包问题II有 NNN 种物品和一个容量是 VVV 的背包。第 iii 种物品最多有 sis_{i}si 件,每件体积是 viv_{i}vi,价值是 wiw_{i}wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,NNN,VVV,用空格隔开,分别表示物品种数和背包容积。接下来有 NNN 行,每行三个整数 viv_{i}vi,wiw_{i}wi,s.原创 2020-10-18 17:35:06 · 442 阅读 · 0 评论 -
动态规划:多重背包问题I
文章目录题目解题思路题目多重背包问题I有 NNN 种物品和一个容量是 VVV 的背包。第 iii 种物品最多有 sis_{i}si 件,每件体积是 viv_{i}vi,价值是 wiw_{i}wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,NNN,VVV,用空格隔开,分别表示物品种数和背包容积。接下来有 NNN 行,每行三个整数 viv_{i}vi,wiw_{i}wi,sis_{i}si,用空格隔开,分别表示.原创 2020-10-18 16:29:27 · 423 阅读 · 4 评论 -
动态规划:完全背包问题
@[TOC](文章目录)题目完全背包问题有 NNN 种物品和一个容量是 VVV 的背包,每种物品都有无限件可用。第 iii 种物品的体积是 viv_{i}vi,价值是 wiw_{i}wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,NNN,VVV,用空格隔开,分别表示物品种数和背包容积。接下来有 NNN 行,每行两个整数 viv_{i}vi,wiw_{i}wi,用空格隔开,分别表示第 iii 种物品的体积和价值.原创 2020-10-13 21:13:00 · 281 阅读 · 3 评论 -
动态规划:01背包问题
文章目录题目解题思路方法一:递归方法二:记忆化搜索/备忘录方法三:动态规划空间优化练习题目Reference题目01背包问题有NNN件物品和一个容量是VVV的背包。每件物品只能使用一次。第iii件物品的体积是viv_{i}vi,价值是wiw_{i}wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,NNN,VVV,用空格隔开,分别表示物品数量和背包容积。接下来有 NNN 行,每行两个整数 viv_{i}vi,wiw.原创 2020-10-11 16:21:07 · 508 阅读 · 2 评论 -
数据结构与算法:Trie字典树
文章目录Trie什么是TrieTrie树的3个基本性质Trie的应用Trie与其他相关数据结构的对比Trie的局限性更多字符串问题实现TrieTrie的节点结构向Trie中添加一个新的单词word(不会重复)查询单词word是否在Trie中查询是否在Trie中有单词以prefix为前缀完整代码练习题目ReferenceTrie什么是Trie字典树:又称单词查找树/前缀树/Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引.原创 2020-10-07 18:26:30 · 330 阅读 · 0 评论 -
数据结构与算法:路径总和III
文章目录题目解题思路代码实现总结题目LeetCode 437. 路径总和III给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \原创 2020-09-11 21:02:16 · 122 阅读 · 0 评论 -
数据结构与算法:最大堆
这里写自定义目录标题堆堆和普通树的区别二叉堆最大堆向堆中添加元素和SiftUp从堆中取出元素和siftDown完整的代码堆堆是用数组实现的二叉树,堆根据**“堆属性”来排序**,“堆属性”决定了树中节点的位置。堆分为两种:最大堆和最小堆,两者的差别在于节点的排序方式。在最大堆中,父节点的值比每一个子节点的值都要大。在最小堆中,父节点的值比每一个子节点的值都要小。这就是所谓的**“堆属性”**,并且这个属性对堆中的每一个节点都成立。根据这一属性,那么最大堆总是将其中的最大值存放在树的根节点。而对于最小原创 2020-09-07 21:49:35 · 578 阅读 · 0 评论 -
数据结构与算法:动态数组
/** * 二次封装自己的数组 * 基本功能 增 删 改 查 * 泛型数组 * 动态数组 * @author yzz * */public class Array<E> { private E[] data; private int size; /** * 构造函数,传入数组的容量capacity * @param capacity */ public Array(int capacity) { d原创 2020-09-07 20:46:27 · 140 阅读 · 0 评论 -
数据结构与算法:n皇后问题
LeetCode 51. n皇后问题n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。(皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。)给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。public class nQueens { final int N = 1010;原创 2020-09-06 23:45:14 · 347 阅读 · 0 评论