- 博客(59)
- 资源 (1)
- 收藏
- 关注
原创 leetcode题目分类
并查集第 547 题:省份数量(中等);第 684 题:冗余连接(中等);第 1319 题:连通网络的操作次数(中等);第 1631 题:最小体力消耗路径(中等);第 959 题:由斜杠划分区域(中等);第 1202 题:交换字符串中的元素(中等);第 947 题:移除最多的同行或同列石头(中等);第 721 题:账户合并(中等);第 803 题:打砖块(困难);第 1579 题:保证图可完全遍历(困难);第 778 题:水位上升的泳池中游泳(困难)。...
2021-04-20 09:37:26
181
原创 33_搜索旋转排序数组javascript
/** * @param {number[]} nums * @param {number} target * @return {number} */var search = function(nums, target) { // binary search with the normal order var find = function binarySearch(left, right, target){ let middle = Math.floor((rig
2021-01-15 16:35:39
191
1
原创 32_最长有效括号JavaScript
方法一:动态规划/** * @param {string} s * @return {number} */var longestValidParentheses = function(s) { var len = s.length; if (len<=1) return 0; if (len===2) { if (s[0]=='('&&s[1]==')') return 2;
2021-01-14 20:26:53
226
原创 31_下一个字典序排列
理解: 找到最小的破坏了降序排列的数字子序列,即从序列末位开始找第一个破坏了降序排列的数字子序列。很显然,最大排列即降序排列是找不到这样的子序列的,那么对于能找到这样子序列的序列,都不是最大排列。程序中求pos就是从数列末尾找到破坏了降序排列的数字的位置。如何得到【pos+降序排列】只大一级的序列呢?显然是找到【降序排列】中比pos大的最小数字的位置,将pos位置的数字与之交换,然后将【降序排列】的数字(仍然满足降序排列)直接reverseclass Solution {public: void n
2020-12-06 19:33:33
204
原创 30_串联所有单词的子串
题目中没有说明,其实words中的单词都是等长的。使用两个hashmap。对words中的每个word,用第一个map1储存单词出现次数,key为单词,value为出现次数;对于string s,首先将其划分为words总长度的子串,然后对于这每一个子串,用第二个map2统计其中所有单词出现的次数,如果次数大于map1中的次数(对于map1中不存在的单词,map1[tempword]<map2[tempword]始终为真),则说明一定不匹配。class Solution {public: v
2020-11-28 22:11:03
71
原创 python递归遍历文件夹下所有文件并记录绝对路径
import osclass findPath: def __init__(self): self.fileList = [] def gci(self, filepath): files = os.listdir(filepath) for fi in files: fi_d = os.path.join(filepath, fi) if os.path.isdir(fi_d):
2020-09-22 21:17:56
1087
原创 jupyter notebook转pdf方法无需latex
直接通过latex转pdf过于反人类。实在不想折腾latex的环境了曲线救国方法:1.jupyter notebook 导出markdown格式.md2.安装markdown编辑器typora。已安装则继续下一步3.用typora打开.md文件。根据需要可以改改格式排排版,看看图片是不是又挂了4.typora导出pdf缺点:渲染出来的效果还是不如jupyter notebook原生的好看。将就能用...
2020-08-25 09:46:35
360
原创 29_两数相除C++
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2数值范围为[INT32_MIN,INT32_MAX],即[−232,232−1][-2 ^{32},2^{32}-1][−232,232−1]这里用了一个INT16_MIN
2020-08-13 22:11:09
519
原创 MySQL导入官方数据库world防踩坑完全操作
1.在MySQL官方网站下载官方数据集world,链接。下载zip格式文件然后解压即可,是一个名叫world.sql的文件2.打开电脑中mysql安装目录下的my.ini文件,找到secure_file_priv路径。如果要从外部导入数据到mysql,必须从信任路径(即secure_file_priv)中导入。不然会报错secure_file_priv=F:\\database\\data\\因此要把步骤1中的world.sql移动到这个信任目录中去3.命令行登录。这时首先要创建这个world数据
2020-08-13 17:08:56
3280
原创 剑指offer_37序列化二叉树C++
因为程序的调用方式是codec.deserialize(codec.serialize(root));所以序列化的方式不用按照题目中举例的那样,可以自行定义序列化方式。如题目中定义的二叉树 [1,2,3,null,null,4,5],在本文的程序中实际被序列化为“1 2 3 null null 4 5 null null null null”。用空格隔开可以方便地使用istringstream操作class Codec {public: // Encodes a tree to a singl
2020-08-12 22:02:21
115
原创 206_反转链表C++
反转链表方法一:迭代法ListNode* reverseList(ListNode* head) { ListNode* p = head,*nex,*prev=NULL; if (head == NULL) return NULL; while (p->next) { nex = p->next; p->next = prev;
2020-08-11 23:47:57
80
原创 25_k个一组翻转链表C++
递归。需要用到O(N)存储空间class Solution {public: ListNode* reverseKGroup(ListNode* head, int k) { if (head == NULL) return head; ListNode* left, *right,*newHead; stack<ListNode*> s; left = head; right = head; s.push(left); int i = k-1; w
2020-08-11 22:08:10
128
转载 802_找到最终的安全状态C++
题目:在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走。 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止。现在, 如果我们最后能走到终点,那么我们的起始节点是最终安全的。 更具体地说, 存在一个自然数 K, 无论选择从哪里开始行走, 我们走了不到 K 步后必能停止在一个终点。哪些节点最终是安全的? 结果返回一个有序的数组。该有向图有 N 个节点,标签为 0, 1, …, N-1, 其中 N 是 graph 的节点数. 图以以下的形式给出: graph[i] 是节点
2020-08-10 21:56:28
172
转载 数据库查询实现
假设用户输入的sql语句为select A1,...,Anfrom R1,...,Rmwhere Cond;关系代数写作ΠA1,⋯ ,An(σcond(R1×⋯×Rm))\Pi_{A_{1},\cdots,A_{n}}(\sigma_{cond}(R_{1}\times\cdots\times R_{m}))ΠA1,⋯,An(σcond(R1×⋯×Rm)),但是直接运算R1×⋯×RmR_{1}\times\cdots\times R_{m}R1×⋯×Rm会产生大量的数据...
2020-08-10 17:10:58
657
原创 24_两两交换链表中的节点C++
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表,必须交换实际的节点。链表数据结构如下://Definition for singly - linked list.struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};一、两个指针遍历交换。时间复杂度O(N),空间复杂度O(1)class Solution {public: ListNode* swapPairs(
2020-08-06 20:53:50
271
原创 路径总和系列C++
基本问题:路径总和 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。class Solution {public: bool hasPathSum(TreeNode* root, int sum) { if (root == nullptr) return false; if (root->left&&root->right) return hasPathSum(root->left, su
2020-08-06 19:37:32
319
转载 OpenCV2.4.6 + VS2010配置
快寒假了,给自己布置了一项寒假作业——系统学习下OpenCV,学习中遇到的问题及解决办法将以学习笔记的形式记录,不足之处希望各位老司机批评指正,一起交流进步!OpenCV版本选择:OpenCV已经出3.x版本了,考虑到实际应用中2.x版本用的更多,以及从2.x进一步学习3.x也很容易上手,因此整个学习笔记系列将以2.x版本为基础。由于OpenCV是一个跨平台的计算机视觉库,因此是不区分操作系统是32还是64位,但是库里面...
2020-08-05 10:15:40
205
原创 23_合并k个排序链表C++
方法一:简单方法.时间复杂度O(k^2N),空间复杂度O(1)class Solution {public: ListNode* merge2List(ListNode* AList, ListNode* BList) { ListNode* mergehead,*mergetemp; mergehead = NULL; if (!AList&&!BList) return mergehead; if (!AList) return BList; if
2020-08-03 22:42:52
116
转载 VS2017连接mysql
首先用到的工具是:安装过程自行操作!!!MySQL下载地址:https://dev.mysql.com/downloads/windows/MySQL命令...
2020-08-01 15:27:10
200
原创 Qt5.14.2安装与VS2017配置调试Qt
Qt5.11.1安装与VS2017配置一、Qt下载安装(一)软件下载(二)安装二、Qt与VS2017相关联三、环境变量配置四、新建项目五、调试配置(一)调试文件的下载(二)vs的项目属性设置虽然Qt本身也能调试,但是很多设计到库的程序还是需要用VS,于是需要连接vs和qt,并用vs调试qt一、Qt下载安装(一)软件下载1.Qt下载网址:官方网站2.选择对应的版本下载即可:笔者选择了较新的版本Qt5.14.2(二)安装安装过程中需要注册。安装组件自行选择,使用VS2017编译则只需选用MSVC
2020-07-31 22:12:00
3537
原创 124_二叉树的最大路径和C++
题目:给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。首先可以想到计算每个节点的权值,这个权值由以这个节点为根节点的树计算得到。权值=根节点value+较大值(左子树权值+右子树权值)可以通过递归实现。而路径和则能以 根节点value+左子树权值+右子树权值 来表示,这样涵盖了树中所有的路径情况。然后用一个MaxSum变量来维护最大路径和即可。而且递归的特点使得可以进行回溯,因此可以从叶子节点往上遍历所有
2020-07-30 21:07:24
1015
原创 回溯之收费公路重建C++
令D为距离的集合,设D={1,2,2,2,3,3,3,4,5,5,5,6,7,8,10},一共6个站点。问题的解,收费站的位置为x1=0,x2=3,x3=5,x4=6,x5=8,x6=10x _{1}=0,x_{2}=3,x_{3}=5,x_{4}=6,x_{5}=8,x_{6}=10x1=0,x2=3,x3=5,x4=6,x5=8,x6=10这里存放距离的数据结构使用了STL中的multiset,头文件为set,特点是插入元素是有序的。注意multiset在删除时有两种用法,特定的值作为参数
2020-07-27 21:13:55
167
原创 22_括号的生成C++
方法一:生成一个树然后打印每条从根节点到叶节点的路径,其实比较麻烦。打印的时候需要判断叶节点是不是左括号//define left parenthesis as -1, right parenthesis as 1class Solution {public: struct TreeNode { int val; TreeNode *left; TreeNode *right; }; void generateTree(TreeNode* root, int parenthesis
2020-07-26 14:06:19
178
原创 173_二叉搜索树迭代器C++
首先是二叉搜索树的建立和操作/*二叉搜索树 binary searching tree*/class BST {public: BST() :root(NULL) {} void buildBST(vector<int> nums); void printBST(); TreeNode* root;private: void insert(TreeNode* &root, int x);//第一个参数为引用 void inorderRecur(TreeNode* r
2020-07-20 21:36:45
122
原创 19_删除链表的倒数第N个节点C++
链表的数据结构//Definition for singly - linked list.struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};方法一:遍历节点时用一个栈存储节点。然后pop出N个节点,最后pop的节点为需要被删除的节点。class Solution {public: ListNode* removeNthFromEnd(ListNode* head, in
2020-07-18 14:35:49
111
原创 685_冗余连接ⅡC++
本题目由冗余连接Ⅰ变形而来。冗余连接Ⅰ较为简单,判断无向图的冗余的边,以保证去掉冗余的边后剩下的边形成一棵树,这个题目用并查集就能实现:如果两条节点属于同一个子集无法进行union,那么连接两个节点的边是冗余的。冗余连接Ⅱ的改变在于将无向图变为了有向图,因此输入的边中可能存在一个节点有两个父节点,这样的节点称为入度为2,它与两个父节点相连的边肯定有一条是冗余的,因此本题的重点在于如何处理入度为2的节点。本文的解法分为三个步骤:1.遍历寻找入度为2的节点2.按照并查集的方式遍历处理除入度为2的节点以外
2020-07-13 09:56:13
196
原创 并查集实现C++
//数组实现并查集#include<iostream>#include<vector>#include "vectorOutput.h"using namespace std;class DisjSets{public: explicit DisjSets(int numElements); int find(int x) const;//访问函数,找到根节点 //int find(int x);//修改函数 void unionSets(int
2020-07-11 11:08:03
125
原创 102_二叉树的层序遍历C++
一般的层序遍历只是一股脑把树的节点打印出来,并不能看出层次。这道题要求遍历输出时要划分树的每一层。在一般层序遍历的基础上记录节点的层数即可。C++中用pair同时存储树节点(TreeNode*)和层数(int)#include<iostream>#include<stdlib.h>#include<vector>#include<queue>#include<utility>using namespace std;//definit
2020-07-08 16:50:51
200
原创 16_最接近的三数之和C++
暴力解法O(N^3)class Solution {public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); int n = nums.size(); int minAbs = INT_MAX; int ans; for (int first = 0; first < n; first++)//第一重循环 { if (f
2020-07-06 17:17:28
87
原创 数据库基础知识与关系模型
笛卡尔积(Cartesian Product)一组域D1D _{1}D1,D2D _{2}D2,…,DnD _{n}Dn的笛卡尔积为D1×D2×⋯×Dn={(d1,d2,⋯ ,dn)∣di∈Di,i=1,⋯ ,n}D _{1} \times D _{2}\times \cdots \times D _{n} = \{(d _{1} , d _{2},\cdots , d _{n} )|d _{i} \in D _{i},i=1,\cdots,n\}D1×D2×⋯×Dn={(d1,d2..
2020-07-06 15:08:15
184
原创 1367_ 二叉树中的列表C++
二叉树数据结构如下//definition of binary tree nodestruct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};本题需要注意一点是子节点的匹配结果是受到父节点匹配结果影响的。分为两种情况:父节点匹配成功、父节点匹配失败父节点匹配成功的情况tree空tree不空list空
2020-07-02 20:27:16
91
原创 二叉树非递归打印所有根节点到叶子节点路径C++
在层序遍历的基础上维护一个队列用于存储从根节点开始的所有路径。路径queue的形成过程类似遍历queue的形成过程,以保证每个叶子节点连接在其父节点的路径后//definition of binary tree nodestruct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public:
2020-07-02 15:25:04
443
原创 二叉树非递归后序遍历C++
我们可以发现二叉树的后序遍历=镜像二叉树的先序遍历的反向输出。于是需要:1.得到镜像二叉树2.非递归的先序遍历镜像二叉树3.将节点的访问结果存储在栈中,利用先入后出的特点将输出结果的顺序反向class Tree {public: TreeNode* invertTree(TreeNode* root) { if (root == nullptr) return nullptr; TreeNode* left = invertTree(root->left); TreeNo
2020-06-30 22:14:59
448
原创 反转二叉树C++
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public: TreeNode* invertTree(TreeNode* root) { if (root == nullptr) return nullptr; TreeNode* left =
2020-06-29 22:25:09
385
原创 顺序存储建立二叉树C++
层序遍历(使用队列)建立二叉树,然后中序遍历输出。输入的vector按照满二叉树的位置填入元素,空的节点值为NULL。用于数据结构树的题目自己运行查看结果。#include<iostream>#include<vector>#include<queue>#define MaxNode 100using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *ri
2020-06-29 22:04:48
823
原创 论文笔记LRNNET: A LIGHT-WEIGHTED NETWORK
论文标题为LRNNET: A LIGHT-WEIGHTED NETWORK WITH EFFICIENT REDUCED NON-LOCAL OPERATION FOR REAL-TIME SEMANTIC SEGMENTATION链接:https://arxiv.org/abs/2006.02706v1一、相关概念1 factorized convolutionfactorized convolution是指对标准的卷积方式进行分解优化,以起到减少参数量、提高运行速率的目的。二、methodol
2020-06-24 18:51:11
569
翻译 CVPR论文PENNI: Pruned Kernel Sharing for Efficient CNN Inference分析
原文地址:https://arxiv.org/abs/2005.07133作者提出了PENNI(Pruned kernel sharing for EfficientCNN Inference),一种CNN模型压缩框架,用于压缩模型参数的冗余度。步骤如下:A.滤波器(filters)SVD分解并retrainB.权值剪枝CD.去除冗余通道滤波器分解。设原始的layer l的参数为θ(l)∈Rcl×cl+1×kwl×khl \theta ^{(l)}\in \mathbb{R}^{c_{l}
2020-06-18 09:50:49
395
原创 pytorch的tensorboard使用方法
笔者使用torch版本:1.5.0载入库的写法为from torch.utils.tensorboard import SummaryWriter程序中创建tensorboard的语句为writer = SummaryWriter(comment=f'LR_{lr}_BS_{batch_size}_SCALE_{img_scale}')意为自动生成保存路径名称。注释(学习率,batchsize和图像尺寸)加在文件名后面。然后可往writer中添加loss等信息,具体写法网上也容易查到。但是这
2020-05-30 22:17:28
727
2
原创 12_整数转罗马数字C++
方法一:容易理解的依次取余方法(用了一下反向迭代器)class Solution {public: string intToRoman(int num) { vector<vector<char>>table = { {'I','V'},{'X','L'},{'C','D'},{'M'} }; vector<int>remainderList; string Roman; while (num != 0) { int remainder;
2020-05-24 21:15:04
163
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人