自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 [算法01] 什么?斜率优化动态规划是啥?

肯定还有一些地方讲的不太对,留个坑以后再填文章目录概述例题1-特别行动队(BZOJ1911)小结例题2-打印文章(HDU3507)例题3-仓库建设(BZOJ1096)概述全文转移方程中的状态都为f。全文两点间的斜率统一表示为g[x,y] {\color{Red}全文转移方程中的状态都为 f。} \\{\color{Green}全文两点间的斜率统一表示为g[x,y]} 全文转移方程中的状态都为f。全文两点间的斜率统一表示为g[x,y]众所周知, 计算斜率的式子大概长这样:xi−xjyi−yj\.

2022-02-05 15:35:36 657

原创 manacher——字符串连接(原BZOJ3790)

题面你可以生成所有形式的回文串,你可以把两个字符串连接起来得到一个新字符串,如果一个字符串的后缀和一个字符串的前缀是完全相同的,那么可以将这个重复部分重叠(也可以不重叠)。例如:aba 和 aca 连接起来,可以生成串 abaaca 或 abaca。现在给出一个字符串,询问你至少需要连接多少次才能得到这个字符串。...

2021-04-05 20:51:37 189

原创 讲评个模拟赛差点把我整懵了……POJ3362 通信线路(最短路+二分答案)

给学弟办一场模拟赛,结果差点把自己给讲懵了……于是决定记录下来,顺便理一理思路说实话,这一题挺有价值的总览题面初步思考——证明答案的单调性转化——判定性问题判定——01赋值法结语题面在郊区有 NNN 座通信基站, PPP 条双向电缆,第 iii 条电缆连接基站 aia_iai​ 和 bib_ibi​ 。特别地,111 号基站是通信公司的总站, NNN 号基站位于一座农场当中。现在,农场主希望对通信线路进行升级,其中升级第 iii 条电缆需要花费 LiL_iLi​ 。电话公司正在举行优惠活动。.

2021-03-08 20:39:44 186

原创 OI BOOK

十年OI一场空,不开longlong见祖宗。二叉树中左右儿子表示不要用i≪1和i≪i|1,尽量用乘号。数据范围要开大就全部开大!!!别传参啥的又变成int了。用unsigned long long 的时候千万要注意,别写出一个负数来,那样会溢出(所以还是尽量用long long)。打DP的时候……如果你觉得DP式子没错的话,那就检查一下是不是初始值没赋对,或者是for循环(次数、顺序等等的细节)打锅了。线段树Add函数的作用只是把这个点打上懒标记,同时注意,区间修改和区间查询都要记得pushdow

2020-11-06 12:46:36 153

原创 各种各样的模板……

基础 语法变换函数模板#include<bits/stdc++.h>using namespace std;template <class T1,class T2>T2 sum(T1 a,T1 b){ return (T2)a+b;}int main(){ cout<<sum<double,float>(1.11111111,2.22222222)<<endl; return 0;}快读模板inline int re

2020-11-06 12:42:40 142

原创 【数据结构2】知道什么是multiset吗?还有迭代器(C++)

前言我是CGZ,我好菜刷题刷到了洛谷的P5076,蒟蒻才知道,在C++的STL中,有一个玩意叫setThen, what is set?set,就是一个有序集合,说的浅显点,就是你丢进去的东西,它会帮你自动排序,并且去重但是,我们这篇文章讲的是multiset那什么是multiset呢?简单地说,它就是set的变种,一切都和set类似,但需要注意的是,它会保留重复元素引入先通过一个程序看看 multiset 的妙用吧#include <bits/stdc++.h>#in

2020-07-22 21:04:43 862

原创 【数据结构1】该死的线段树,毁我青春……(C++)

线段树笔记线段树是啥先明确线段树是啥。每棵线段树都表示一个长度为 NNN 的区间。一棵线段树的根节点 rootrootroot 表示一个 (1,n)(1,n)(1,n) 的区间,它的左儿子表示一个 (1,1+n2)(1,\frac{1+n}{2})(1,21+n​) 的区间,而右儿子就是表示 (1+n2+1,n)(\frac{1+n}{2}+1, n)(21+n​+1,n) 的区间。通过上面这段话,显而易见地,如果一个节点表示的是 (l,r)(l, r)(l,r) ,那么,该节点的左儿子表示的就是

2020-05-20 21:21:34 139

原创 leetcode_687. 最长同值路径(C++)

题目原题链接给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。**注意:**两个节点之间的路径长度由它们之间的边数表示。示例 1:输入: 5 / \ 4 5 / \ \ 1 1 5输出:2示例 2:输入: 1 ...

2020-05-08 21:28:38 160

原创 leetcode_501. 二叉搜索树中的众数(C++)

题目原题链接给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值结点右子树中所含结点的值大于等于当前结点的值左子树和右子树都是二叉搜索树例如:给定 BST [1,null,2,2], 1 \ 2 / 2返回[2].提示: 如果...

2020-05-06 22:07:19 174

原创 leetcode_1022.从根到叶的二进制数之和(C++,用递归来遍历)

题目原题链接给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。以 10^9 + 7 为模,返回这些数字之和。思路其实这题的思路很简...

2020-05-05 16:57:02 135

原创 leetcode_669. 修剪二叉搜索树(C++,6行递归)

题目原题链接给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。示例 1:输入: 1 / \ 0 2 L = 1 R = 2输出: 1 \ 2示例 2:输入:...

2020-05-05 15:40:30 136

原创 leetcode_993. 二叉树的堂兄弟节点(C++,广搜)

题目原题链接在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root,以及树中两个不同节点的值 x 和 y。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true。否则,返回 false。思路首先思考,堂兄弟节点要满足什么条件呢?...

2020-05-05 11:33:57 202

原创 leetcode_606. 根据二叉树创建字符串(C++,递归实现)

题目原题链接你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4 输出: "1(2(4))(3)"解释:...

2020-05-05 09:34:37 197

原创 leetcode_653. 两数之和 IV - 输入 BST(C++,中序遍历+二分查找)

题目原题链接给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。案例 1:输入: 5 / \ 3 6 / \ \2 4 7Target = 9输出: True案例 2:输入: 5 / \ 3 6 / \ \2 4 7Target = 2...

2020-05-04 22:50:27 153

原创 leetcode_538. 把二叉搜索树转换为累加树(C++,不正常的中序遍历)

题目原题链接给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:输入: 原始二叉搜索树: 5 / \ 2 13输出: 转换为累加树: 18 ...

2020-05-04 11:30:53 95

原创 leetcode_897. 递增顺序查找树(C++,中序遍历)

题目原题链接给你一个树,请你 按中序遍历 重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。示例 :输入:[5,3,6,2,4,null,8,1,null,null,null,7,9] 5 / \ 3 6 / \ \ 2 4 8 / / \ 1 7 ...

2020-05-04 10:24:56 221

原创 leetcode_95. 不同的二叉搜索树 II(C++,枚举法)

题目原题链接给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。示例:输入: 3输出:[ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 3 ...

2020-05-04 09:11:01 169

原创 leetcode_96. 不同的二叉搜索树(C++,DP双百解法)

题目原题链接给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2...

2020-05-03 09:52:51 130

原创 leetcode_894. 所有可能的满二叉树(C++,详细讲解)

题目原题链接满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。返回包含 N 个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。答案中每个树的每个结点都必须有 node.val=0。你可以按任何顺序返回树的最终列表。示例:输入:7输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0...

2020-05-02 20:06:01 346

原创 leetcode_701. 二叉搜索树中的插入操作(C++)

题目原题链接给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 保证原始二叉搜索树中不存在新值。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和 插入的值: 5你可以返回这个二叉搜索树: ...

2020-05-02 09:38:05 255

原创 leetcode_654. 最大二叉树(C++)

题目原题链接给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。示例 :输入:[3,2,1,6,0,5]输出:返回下面这棵树的根节点: 6 / \...

2020-05-01 11:51:49 308

原创 leetcode_814. 二叉树剪枝(C++,双百解法)

题目原题链接给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身,以及所有 X 的后代。)示例1:输入: [1,null,0,0,1]输出: [1,null,0,null,1] 解释: 只有红色节点满足条件“所有不包含 1 的子树”。右图为返回的答案。示例2:输入: [1,...

2020-04-30 21:34:00 186

原创 leetcode_199. 二叉树的右视图(C++,层序遍历)

题目原题链接给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---思路这题一眼看...

2020-04-28 21:16:02 95

原创 (附带讲解upper_bound函数)NOI Online#2 T1未了endless(C++,贪心+二分)

由于触犯天神,Sisyphus 将要接受惩罚。宙斯命 Sisyphus 推一块巨石上长度为 LL 的山坡。Sisyphus 匀速向上推的速度为每年 vv 的长度(由于是匀速,故经过 \frac{1}{2}21​ 年将能向上推 \frac{v}{2}2v​ 的长度)。然而,宙斯并不希望 Sisyphus 太快到达山顶。宙斯可以施展 nn 个魔法,若宙斯施展第 ii 个魔法 (1\l...

2020-04-27 22:04:11 278

原创 leetcode_117.填充每个节点的下一个右侧节点指针II(C++,递归思路)

题目原题链接给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用...

2020-04-26 22:30:38 225

原创 leetcode_116.填充每个节点的下一个右侧节点指针(C++,三行核心代码)

题目原题链接给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 nex...

2020-04-25 10:16:57 237

原创 leetcode_114.二叉树展开为链表(C++,图解非递归原地算法)

题目给定一个二叉树,原地将它展开为链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6思路我们取根节点作递归使用,每次对根节点进行操作,然后根节点指向它的右孩子,操作如下...

2020-04-23 22:40:34 137

原创 关于C++_STL——vector容器的使用

目录

2020-04-22 22:08:55 191

原创 leetcode_98.验证二叉搜索树(厚颜无耻地用上了C++指针)

题目原题链接给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3...

2020-04-21 23:33:47 84

原创 leetcode_103.二叉树的锯齿形层次遍历(C++,reverse函数)

参考文献:revers函数源码解析(侵删侵删侵删,重要的事情说三遍)题目原题链接给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3]...

2020-04-20 22:55:51 279

原创 leetcode_637. 二叉树的层平均值(C++,队列实现)

题目给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.示例 1:输入: 3 / \ 9 20 / \ 15 7输出: [3, 14.5, 11]解释:第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].注意:节点值的范围在32位有符号整数范围内。思路解释:题目中的 32位有...

2020-04-20 21:35:15 388

原创 leetcode_107. 二叉树的层次遍历 II(C++,队列辅助实现)

题目原题链接给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]思路我们先思考一下,这道题最...

2020-04-19 09:44:11 175

原创 leetcode_102. 二叉树的层序遍历(C++,前序遍历)

题目给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]思路该题我们采用前序遍历的思路又因为题目要求每层的节点返回一个一...

2020-04-18 23:10:14 404

原创 leetcode_111.二叉树的最小深度(DFS & 易错点讲解)

题目给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.思路一个很简单的思路,除非该点为空,否则返回左右孩子中的较小值。/** * D...

2020-04-18 16:55:17 137

原创 leetcode_129. 求根到叶子节点数字之和(DFS 100%)

题目原题链接给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 25解释:从根到叶子节点路径 1->...

2020-04-18 11:50:20 147

原创 leetcode_1372.二叉树中的最长交错路径(DFS)

题目原题链接给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下:选择二叉树中 任意 节点和一个方向(左或者右)。如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。改变前进方向:左变右或者右变左。重复第二步和第三步,直到你在树中无法继续移动。交错路径的长度定义为:访问过的节点数目 - 1(单个节点的路径长度为 0 )。请你返回给定树中最长 交错...

2020-04-18 11:08:54 233

原创 leetcode_437.路径总和III(暴搜?或许吧)

题目原题链接给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = ...

2020-04-12 12:45:01 87

原创 leetcode_404.左叶子之和(两种思路:递归&非递归)

题目原题链接计算给定二叉树的所有左叶子之和。示例: 3 / \ 9 20 / \ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24思路该题细节较多,有些看似不重要的特判语句,不加则会导致程序不够严谨,致使答案或编译出错,以下代码注释中有写“不加会出错”的就是这类语句。/** * Definition for a ...

2020-04-11 11:53:51 147

原创 leetcode_257.二叉树的所有路径(递归&字符串)

题目原题链接给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入: 1 / \2 3 \ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3思路首先,定义一个递归函数,该函数有两个参数,一个是当前节点...

2020-04-11 09:47:21 109

原创 leetcode_226. 翻转二叉树(swap函数,递归思路)

题目原题链接翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1思路什么是翻转二叉树?简单点说……就是将左右子树调换位置,但是需要注意的是,左右子树的左右子树也需要调换位置,什么意思呢?可能有点绕……...

2020-04-07 23:22:38 327

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除