自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (1)
  • 收藏
  • 关注

原创 union-find

并查集(union-find)是一种十分简洁而优雅的数据结构之一,主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中。并查集的逻辑结构如有一组数据 { 1,2,3,4,5,6,7,8 },其中,{ 1,2,3 },{ 4,5 },{ 6,7,8 }各自组成独立的集合,即集合相交为空,我们如何判断两个元素是否在同一集合中呢?一种简单的想法是,我们给每个元素打上一个标签,如

2021-01-18 10:36:23 272

原创 关系型数据库标准语言SQL

SQL的特点综合统一 SQL集定义语言、数据操作语言、数据控制语言的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动。定义和修改、删除关系模式,定义和删除视图,插入数据,创建数据库。对数据库中的数据进行查询和更新。数据库重构和维护。数据库安全性、完整性控制,以及事物控制。嵌入式SQL和动态SQL。高度非过程化面向集合的操作方式以同一种语言结构提供多种使用方式语言简洁、易学易用数据定义 属性 操作方式 创建

2020-12-16 18:55:30 1008

原创 【C语言】fprint 在 fscanf 后失效

昨天夜里在群里看到同学问的问题。代码如下:#include <stdio.h>#include <stdlib.h>int main() { FILE* fp = NULL; fp = fopen("source.txt", "w+"); if (!fp) return -1; int write[] = {1,2,3,4,5}; int read[5]; for (int i = 0; i < 5; ++i) {

2020-12-16 11:31:08 583

原创 【力扣每日一题】649.Dota2 参议院

可以使用循环队列存储投票的顺序。以下是一种简单的容易理解的实现方式:使用两变量 D_cnt 和 R_cnt 分别存储 R 方和 D 方的投票人数使用 dec_R 和 dec_D 分别存储 R 方和 D方别投出的人数当队列首位被票出时,直接将队首弹出,否则投出对方一位参议员,且将队首移到队尾,等待下一次投票。class Solution {public: string predictPartyVictory(string senate) { queue<char.

2020-12-11 13:29:54 262

原创 【力扣每日一题】860.柠檬水找零

由于顾客只可能给你三个面值的钞票,而且我们一开始没有任何钞票,因此我们拥有的钞票面值只可能是 5 美元,10 美元和 20 美元三种。基于此,我们可以进行如下的分类讨论。5 美元,由于柠檬水的价格也为 5 美元,因此我们直接收下即可。10 美元,我们需要找回 5 美元,如果没有 5 美元面值的钞票,则无法正确找零。20 美元,我们需要找回 15 美元,此时有两种组合方式,一种是一张 10 美元和 5 美元的钞票,一种是 3 张 5 美元的钞票,如果两种组合方式都没有,则无法正确找零。当可.

2020-12-10 18:12:06 291 2

原创 【力扣每日一题】62.不同路径

这题比较简单,至少能想到动态规划和排列组合两种方法。方法一:动态规划明显,到达第 i 行 j 列的点的路劲数为到达第 i-1 行 j 列的路劲数与到达 i 行 j-1 列的路劲数之和。而第一行和第一列的点只有一条路劲,即不停向右或不停向下。由此,可以使用一个 m*n 维的dp数组进行动态规划,dp[m-1][n-1]即是到达第 m 行 n 列的路劲数。class Solution {public: int uniquePaths(int m, int n) { vect.

2020-12-09 09:32:20 178

原创 【力扣每日一题】842. 将数组拆分成斐波那契序列

为了将给定的字符串拆分成斐波那契式序列,我们需要遍历所有的可能的拆分方式,因此可以通过回溯的方法实现。根据斐波那契式序列的要求,从第 3 个数开始,每个数都等于前 2 个数的和,因此从第 3 个数开始,需要判断拆分出的数是否等于前 2 个数的和,只有满足要求时才进行拆分,否则不进行拆分。可以据此进行剪枝操作。拆分出的数如果不是 0,则不能以 0 开头,因此如果字符串剩下的部分以 0 开头,就不需要考虑拆分出长度大于 1 的数,因为长度大于 1 的数以 0 开头是不符合要求的,不可能继续拆分得到斐波.

2020-12-08 08:56:45 208

原创 【力扣每日一题】861.翻转矩阵后的得分

这题乍看之下似乎没有思路,如果对矩阵的每一行的翻转结果进行计算,进行比较,就会发现进下来的路很难走。但是,我们没有必要一行一行的计算。对矩阵中的每一个树,其实可以看作一个加权,假定每一行有 n 个数,则第 i 行 j 列的权值为 2n-j-1,权值按行从左往右递减,其每一列的权值相同,因此可以通过纵向比较,确保每一列取最大值,即可确保最终结果取得最大值。首先要通过行变换保证每行第一个元素值为1。为什么是行变换?其实列变换也可以,但是列变换为1,说明此前通过行变换将第一个元素全变为0,多此一举,于后面的.

2020-12-07 09:21:31 186

原创 【力扣每日一题】52.N皇后II

八皇后问题是个经典的问题,N皇后问题算是八皇后问题的扩展,都可以通过回溯方法求解。数据的储存方式:对于一个nxn的棋盘,最基本的实现方式是使用一个nxn的矩阵M,若矩阵M[i][j]值为1,则表示在点(i,j)处放置一个皇后。但是这个实现方式比较耗内存。我们知道,一行内最多只能有一个皇后,所以可以使用一个大小为 n 的数组pos,pos[i]即表示在(i,pos[i])处放置一个皇后。这样就能极大的减小内存的开销,同时能更高效的找到已放置皇后的位置。冲突检测:两个皇后不能在同一行、列,与斜线.

2020-10-17 21:01:14 232

原创 【力扣每日一题】145.二叉树的后序遍历

递归法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr)..

2020-09-29 22:00:39 162

原创 【力扣每日一题】117. 填充每个节点的下一个右侧节点指针 II

/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {} Node(i

2020-09-28 17:07:49 233

原创 【力扣每日一题】235.二叉搜索树的最近公共祖先

题目很简单。由于是BST,则分三种情况考虑:root->val比p->val和q->val都大,则root左移root->val比p->val和q->val都小,则root右移root->val介于p->val与q->val之间,则root是p和q的公共祖先/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNo.

2020-09-27 08:12:56 149

原创 【力扣每日一题】113. 路径总和 II

又是关于二叉树的算法,由于不知道节点是否能包含负值,所以我们默认节点值可能为负,因此必须遍历从头节点到叶节点的每一条路劲,即穷举。很容易想到dfs+回溯的做法。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), ri.

2020-09-26 08:05:59 170

原创 【力扣每日一题】106.从中序与后序遍历序列构造二叉树

递归法中序遍历结果即[左子树遍历结果+root->val+右子树遍历结果]后序遍历结果即[左子树遍历结果+右子树遍历结果+root->val]所以通过后序遍历结果很容易可以得到树的根节点值,再通过中序遍历找到相应的值,其左侧即为左子树遍历结果,其右侧即为右子树遍历结果,递归进行划分(注意,只有在树中无重复节点时才可以使用这种方法)/** * Definition for a binary tree node. * struct TreeNode { * int val..

2020-09-25 11:08:43 170

原创 【力扣每日一题】501.二叉搜索树中的众数

解法1class Solution {public: vector<int> findMode(TreeNode* root) { inorder(root); return ans; } void inorder(TreeNode* root) { if (!root) { return; } inorder(root->left); ..

2020-09-24 21:07:22 147

原创 【编译原理】正则文法与正则式的等价性

正则文法到正规式的转换规则:文法表达式正则式规则1A->xB B->yA=xy规则2A->xA|yA=x*y规则3A->x A->yA=x|y正则式到正则文法到转换规则:正则式正则表达式规则1A=xyA->xB B->y规则2A=x*yA->xB A->y B->xB B->y规则3A=x|yA->x A->y规则2具有单向

2020-09-23 23:41:28 2919

原创 【力扣每日一题】617.合并二叉树

这题相当简单,只需要做到同步遍历两颗树即可,分为以下情况考虑:两棵树同时为空,则返回nullptr一棵树为空,则直接返回另一棵树两棵树都不为空,则节点值直接相加其中情况1、2可以当作一种情况处理/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : .

2020-09-23 12:44:27 170

原创 将IDEA Terminal替换成Git Bash

Windows操作系统下,idea自带的终端类似于cmd的终端,没有tap命令补全功能,自带的命令也不好用,于是想换成git bash终端。1. 下载安装git略过不会的朋友参考这篇博客2. 将IDEA Terminal替换成Git Bash在IDEA中,打开settings,设置相应的bash路径settings–>Tools–>Terminal–>Shell path:C:\Program Files\Git\bin\bash.exe忘记安装路径的朋友可以使用wher

2020-07-01 10:14:03 1302 1

哲学家就餐问题GUI

哲学家就餐问题的简单GUI实现 环境:Windows10+vs2019+EasyX 语言:cpp 当哲学家得不到一双筷子时,则等待一段时间就放弃已获得的资源

2020-05-03

空空如也

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

TA关注的人

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