- 博客(41)
- 收藏
- 关注
原创 区间dp _P1220关路灯
这是一道区间型的动态规划题;我主要是对前方的一些dp题解补充一些小细节。既然是动规,那么首先讲一下常用的填表法和刷表法:填表法就是利用状态转移方程和上一个状态来推导出现在的状态(相当于知道已知条件,将答案填入)刷表法就是利用当前的状态,把有关联的下一状态都推出来。这道题我选用的是填表法。理解一下题目大意:关灯不需要额外的时间,经过了灯就关了。但是可能折返回去关某一个大灯会比继续往下走关接下来的一个小灯更优,那么可以得到两种状态(沿着当前方向继续往下走,改变方向回去关灯)。
2020-09-20 10:40:10
238
原创 单调列队
// 单调列队vector<int> res;class MonotonicQueue {private: deque<int> data;public: void push(int n) { while (!data.empty() && data.back() < n) { data.pop_back(); } data.push_back(n);
2020-09-06 14:49:13
148
原创 Leetcode 257.二叉树的所有路径
class Solution {public: vector<string> binaryTreePaths(TreeNode* root) { vector<string> paths; // result if (root == nullptr) { return paths; } queue<TreeNode*> node_queue; queue&
2020-09-04 09:41:59
138
原创 位运算
文章目录1.lowbit 计算一个数二进制下最低位 1 对应的值判断一个数x二进制下的第i位是否为1将一份数字x二进制下第位改为1计算一个数字x二进制下含有1或0的个数判断一个数x是否为 2 的n次方对 1 ^ (异或)1.lowbit 计算一个数二进制下最低位 1 对应的值int lowbit(int x) { return x&(-x)}判断一个数x二进制下的第i位是否为1bool isOne(int x) { int i; // 想办法取出x的第 i 位 retur
2020-07-22 21:54:53
159
原创 递归_95.不同的二叉搜索树 II(20200721)
// 1.思路对于一颗二叉搜索树以及每一颗子树,由基本性质// 2.索引 1 ~ i-1 显然对应左子树, i+1 ~ n对应右子树 i 为根// 3.先枚举每一个可行的根节点// 4.按照 2 递归的找出每一颗子树的左子树和右子树// 5.把递归出的左子树和右子树接到对应的根上// 6.把得到的答案返回/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *l
2020-07-21 08:13:27
177
原创 动态规划 & 搜索_312.戳气球(20200719)
动态规划// 1.定义 dp[i][j] 为区间 (i, j)内最大可获得硬币数// 2.状态转移 —— // 2.1 dp[i][j] = |k=i+1, j-1| max val[i]*val[k]*val[j] + dp[i][k] + dp[k][j] , i < j-1// 2.2 0 , i >= j - 1// 3.base case :// 3.1 val[0] = val[n + 1] = 1;// 4. ans = dp[0][n+1]class
2020-07-19 08:14:28
133
原创 牛客_牛客编程巅峰赛S1第4场 - 青铜&白银
A毫无意义B 浅尝辄止 class Solution {public: const int mod=998244353; /** * * @param n long长整型 * @return int整型 */ #define ll long long int work(long long n) { // write code here ll ans=0; for(ll l=1
2020-07-18 22:11:44
180
原创 动规_97.交错字符串(20200718)
常规 & 解析/** 1. 显然是动规 2. 状态转移: p = i + j - 1; 2.1 dp[i][j] |= (dp[i - 1][j] && s1[i - 1] == s3[p]); 2.2 dp[i][j] |= (dp[i][j - 1] && s2[j - 1] == s3[p]); 3. 定义 : 3.1 p 对应 s3 中串的位置 3.2 dp[i][j] 动规其实就是暴力遍历了啦,你懂的 3
2020-07-18 09:13:15
144
原创 动规_1143.最长公共子序列
// 状态转移 :// 1.正常匹配 :dp[i][j] = dp[i - 1][j - 1] + 1;// 匹配就取左上角的值 + 1// 2.未匹配 :dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);// 未匹配就取左 / 上 中最大的一个class Solution {public: int longestCommonSubsequence(string text1, string text2) { int rows = tex
2020-07-17 15:01:22
119
原创 散列表
解决散列冲突 :1. 开放寻址法线性探测二次线性探测在 1 的基础上,探测第二次再哈希使用不同的哈希算法来存放(可能用多个)2. 链地址法如图,一次hash后链式存储
2020-07-17 10:10:20
117
原创 树遍历_538.把二叉搜索树转换为累加树(20200717)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { int preSum = 0; // 共享单元 public TreeNode convertBST(Tree
2020-07-17 08:04:10
105
原创 滑动窗口
文章目录框架例题最小覆盖字串(Leetcode 76)找到字符串中所有字母异位词(Leetcode 438)无重复字符串最长子串(Leetcode 3)框架// 定义左右指针int left = 0, right = 0;// 维护一个 window 窗口while (right < s.size()) { window.add(s[right++]); // 右指针 向右移动 while (valid) { window.remove(s[left
2020-07-16 22:53:48
147
原创 快速幂
int powMod(int a, int b, int mod){ int res = 1; while (b){ if (b&1) res = (res*a) % mod; a = (a*a) % mod; b >>= 1; } return res;}
2020-07-16 21:39:27
101
原创 分治_三分_峰值
算法模板/* 查找函数最大值*/#define target 1e-6 // 精度// 定义一个计算函数 Caculateint BinarySearch(double low, double high) { double left, right; double mid, mid_mid; left = low; // 设置当前查找区间上界 right = high; // 设置当前查找区间下界的初值 while (right-left > target
2020-07-16 19:31:50
160
原创 搜索&图论_785.判断二分图(20200716)
文章目录分析算法流程:DFSBFS分析对于图中的任意两个节点 u 和 v,如果它们之间有一条边直接相连,那么 u 和 v 必须属于不同的集合。如果给定的无向图连通,那么我们任选一个节点开始,染成红色。随后我们对整个图进行遍历,将该节点直接相连的所有节点染成绿色,表示这些节点不能与起始节点属于同一个集合。我们再将这些绿色节点直接相连的所有节点染成红色,以此类推,直到无向图中的每个节点均被染色。如果我们能够成功染色,那么红色和绿色的节点各属于一个集合,这个无向图就是一个二分图;如果我们未能成
2020-07-16 08:01:53
226
转载 拓扑排序与关键路径
文章目录理论AOV 网判定任意一条拓扑排序字典序最小的一条路径【例题】1.拓扑排序的判定2.输出拓扑排序结果3.拓扑排序的应用理论拓扑排序(只适用于AOV网(有向无环图))运用 : 事务先后(非唯一)拓扑排序思路:1.选择一个入度为 0 的点 并输出2.从AOV网中删除此顶点以及此顶点为起点的所有关联边3.重复上述两步,直到不存在入度为0的顶点为止4.如果书粗糙顶点数小于AOV网中的顶点数,则输出“有回路信息”,否则输出的顶点序列就是一种拓扑排序算法实现:1.数据结构: indgr[i]
2020-07-15 22:15:05
539
原创 动态规划 & 数学_96.不同的二叉搜索树(20200715)
动态规划// 动态规划 时间 O(n^2), 空间 O(n)// 1. 1 ... i-1 作为左子树// 2. i+1 ... n 作为右子树// 3. 递归构建,由于根值不同,每颗二叉搜索树唯一// 4. dp[n] : 长度为 n 的序列能构成不同二叉搜索树的个数// 5. F[i, n] : 以 i 为根、序列长度为 n 的不同二叉搜索树个数(1 <= i <= n)// 6. 确定状态转移:dp[i] += dp[j-1] * dp[i-j];// 7. base ca
2020-07-15 06:58:26
149
转载 图论_最小生成树算法
文章目录1.Kruskal2.Prim1.Kruskal#include<iostream>using namespace std;struct Edge{ int u,v,w; bool operator <(Edge K)const{ return w<K.w; }} edge[N];int n,m;int father[N],res;int mst=0;int Find(int x){ if(father[x
2020-07-14 21:19:29
169
原创 深度优先搜索(DFS) & 广度优先搜索(BFS)总结
文章目录深度优先1.算法模板2.例题2.1 n 皇后问题(洛谷)2.2 素数环(洛谷)2.3 全排列(洛谷)2.4 马的遍历(洛谷)广度优先1.算法模板2.例题2.1 Dungeon Master(洛谷)2.2走迷宫2.3 Knight Moves(洛谷)深度优先1.算法模板void dfs(int i) // 核心代码{ if ( 1.到达推出条件 ) { // 搜索结束, 退出 } for ( 2.遍历所有可能 ) { if ( 3.满足走
2020-07-14 20:48:30
369
原创 动态规划_120.三角形最小路径和(20200714)
// 动态规划 ? 其实说成是模拟暴力都不为过// 状态转移:f[j] = min(f[j-1], f[j]) + triangle[i][j];// base case: 对每一行最右边的位置初始化// f[i] = f[i-1] + triangle[i][i];class Solution {public: int minimumTotal(vector<vector<int>>& triangle) { int n = triangl
2020-07-14 07:06:49
189
原创 动态规划_打家劫舍AK
198.打家劫舍// 1.不可以盗窃相邻// 2.状态转移 dp[i] = max(dp[i-1], num[i] + dp[i-2])// 3.状态压缩呀 ~ dp_1, dp_2// 似乎就解决了勒?// 4. base case 一开始都是 0 class Solution {public: int rob(vector<int> &nums) { if(nums.size() == 0) return 0; int dp_i
2020-07-13 11:52:18
161
原创 KMP算法
public class KMP { private int[][] dp; private String pat; public KMP (String pat) { this.pat = pat; int M = pat.length(); // dp[状态][字符] = 下个状态 dp = new int[M][256]; // base case dp[0][pat.charAt(0)] = 1; // 影子状态 X 初始为 0 int X = 0; /
2020-07-13 08:12:20
176
原创 单调列队_239.滑动窗口的最大值()
//class MonotonicQueue {private: deque<int> data;public: void push(int n) { while (!data.empty() && data.back() < n) { data.pop_back(); } data.push_back(n); } int max() { return data.
2020-07-13 08:00:10
138
原创 hash_350.两数交集II(20200712)
// 两遍 hash 表// time: O(max(m, n)) space:O(max(m, n))class Solution {public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { unordered_map<int,int> hash; vector<int> res;
2020-07-13 07:42:03
110
原创 图论_三类最短路径模板
文章目录1.floyd2.dijkstra1.floyd#include<bits/stdc++.h>using namespace std;int main(){ int e[10][10] int n, m; int t1, t2, w; //用inf(infinity的缩写)存储一个我们认为的正无穷值 //读入n和m,n表示顶点个数,m表示边的条数 scanf("%d %d", &n,&m); //初始化 for(int i = 1; i <
2020-07-12 09:12:22
168
原创 动态规划_174.地下城游戏(20200712)
// java/**1. 显然是动规问题,但正向动规是错的2. 为什么?3. 我来举个例子4. 由于存在增加生命值的情况,恰如: 4.1 路径 0 -> -1 -> 1 -> -1 -> -3 所需初始生命为 3 + 1 4.2 路径 0 -> -2 -> 6 -> -1 -> -3 所需初始生命为 2 + 1 4.3 显然路径 4.2 更优,但在正向动规过程中会选择 4.15. 所以我们使用反向动规 ?我们可以避免以上的情况6. 状态转移
2020-07-12 08:03:52
272
原创 动态规划—股票问题AK
1.整体框架1.1定义dp数组// i 表示第i天 // k表示可以操作的次数 // 0 表示不持有股票, 1 表示持有股票// 一定要记仔细定义,不过我相信你会经常来这里看的dp[i][k][0] = max(dp[i-1][k][0], dp[i-1][k][1] + prices[i]) max(选择 rest 选择 sell )解释:今天我没有持有股票,有两种可能:要么是我昨天就没有持有,然后今天选择
2020-07-10 09:41:13
316
转载 链表的专题
文章目录1 输出单链表的第K个节点两次遍历法:递归法:双指针法2.1 链表中存在环快慢指针法:2.2 定位环入口2.3 计算环长度3 有序链表合并常规解决递归解决4 翻转链表迭代法递归法1 输出单链表的第K个节点两次遍历法:(1)遍历单链表,遍历同时得出链表长度 N 。(2)再次从头遍历,访问至第 N - K 个节点为所求节点。/*计算链表长度*/int listLength(ListNode* pHead){ int count = 0; ListNode* pCur = pH
2020-07-06 08:14:44
145
原创 排序算法思想
不是吧?o(n^2)的算法也要讲?1.冒泡排序辅助记忆:i∈[0,N-1) //循环N-1遍j∈[0,N-1-i) //每遍循环要处理的无序部分swap(j,j+1) //两两排序(升序/降序)// c++void bubble_sort(T arr[], int len) { int i, j; for (i = 0; i < len - 1; i++) for (j = 0; j < len - 1 -
2020-07-05 22:37:41
179
转载 二叉树的专题
1.数据结构:class TreeNode{ int val; //左孩子 TreeNode left; //右孩子 TreeNode right;}2.二叉树的最大深度int maxDeath(TreeNode node){ if(node==null){ return 0; } int left = maxDeath(node.left); int right = maxDeath(node.right);
2020-07-05 16:05:16
150
原创 树的专题(构造与理论)
各类树的构造基本的二叉树package 数据结构与算法;// 根节点// 父节点// 子节点// 度(子节点个数)// 节点的权(值)// 叶子节点(无子节点)// 子树// 层// 树高度 ,最大树深度// 森林public class 树结构 { public static void main(String[] args) { // 创建一棵树 BinaryTree binTree = new BinaryTree(); // 创建一个根节点 TreeN
2020-07-04 23:39:47
146
原创 优先列队(堆)
优先列队(堆)也是一种树结构!!package 数据结构与算法;import java.util.Arrays;// 堆的性质// 大顶堆:父节点 > 子节点// 小顶堆:父节点 < 子节点 // 升序排列大顶堆// 降序排列小顶堆// 联想堆排序,快排?public class 树_堆结构 { public static void main(String[] args) { int[] arr = {9, 6, 8, 7, 0 ,1, 10, 4, 2};
2020-07-04 23:25:36
132
原创 链表类算法
单向链表c++在这里插入代码片Javapackage 数据结构与算法;import java.util.*;public class 链表 { public static void main(String[] args) { /* LinkedList<String> myList = new LinkedList<String>(); myList.add("1"); myList.add("2"); myList.add("3");
2020-07-04 19:58:27
178
原创 并查集模板
#include <iostream>#define ll long longusing namespace std;int father[5010];void initial(int n) { for(int i=0; i <= n; i++) father[i] = i;}int find(int x) { return x == father[x] ? x : father[x] = find(father[x]);}bool isSame(in
2020-07-04 17:19:45
131
原创 大数阶乘
#include<bits/stdc++.h>using namespace std; int main() { int i,n,a[50000],k,v=0,j,m=0; cin>>n; a[0]=1; for(i=2;i<=n;i++) { for(v=0,j=0;j<=m;j++) { k=a[j]; a[j]=(k*i+v)%10; v=(k*i+v)/10; } while(v) { a[++m]=v%
2020-07-04 17:00:06
161
原创 快读模板
#include<bits/stdc++.h>using namespace std;inline int read(){int s=0,w=1;char ch=getchar();while(ch<‘0’||ch>‘9’){if(ch==’-’)w=-1;ch=getchar();}while(ch>=‘0’&&ch<=‘9’) s=s10+ch-‘0’,ch=getchar();return sw;}int main(){int
2020-07-04 16:54:27
141
原创 大整数
#include<bits/stdc++.h>#define re register#define ll long long#define RS(p) p<<1#define LS(p) p<<1|1#define MAX_N 105#define INF 0x3f3f3f3f#define MOD 1000007#define Pii pair<int,int>using namespace std;class BigInteger{
2020-07-04 16:46:28
131
转载 单调栈运用
解决问题类型The Greater Element1.模板如题:给你⼀个数组 [2,1,2,4,3],你返回数组 [4,2,4,-1,-1]。解释:第⼀个 2 后⾯⽐ 2 ⼤的数是 4; 1 后⾯⽐ 1 ⼤的数是 2;第⼆个 2 后⾯ ⽐ 2 ⼤的数是 4; 4 后⾯没有⽐ 4 ⼤的数,填 -1;3 后⾯没有⽐ 3 ⼤的数,填 -1。vector<int> nextGreaterElement(vector<int>& nums) { vector<
2020-06-11 08:22:15
137
原创 UMLgreen萌新使用指南
umlgreen下载方法见末位链接(注意, 线上安装方式以及不可用)瞧这里有一个包和一堆类你看现在这里没有UMLgreen的窗体先选中包 然后右键, new —> other —>UML green然后我们继续:选中包,并输入名字,这样就在当前包下建立了一个UML窗体然后在当前包下选中你想uml的文件(我这里是TestCircle)右键,UML 你会看见三个选项,...
2020-04-28 22:05:28
569
原创 JDK安装以及环境变量配置时可能遇到的问题分析
JDK下载网址:https://www.oracle.com/technetwork/java/javase/downloads/index.html1.JDK 安装步骤:注意这里需要勾选Accep才能进行下载下载好后找到文件并安装(我这里是一个示例)2.环境变量配置运行 > “环境变量” > Enter1.配置系统变量CLASSPASS如图(如果没有就自己新建一个)...
2020-02-04 18:20:31
443
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人