自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 解题记录 LeetCode 字符串建图问题

通过字符串建立图模型, 通过 bfs 以及 dfs 求解

2022-01-23 20:23:04 409

原创 Vue 基础快速入门(二)

脚手架, 组件化编程, 多组件, 单组件, 过渡与动画, Vuex

2021-12-21 20:30:22 900

原创 Vue 基础快速入门(一)

插值语法, MVVM, 模板, 数据绑定, 事件, 计算属性, 监视属性, 绑定样式, 条件渲染, 列表渲染, 过滤器, 常用指令, 自定义指令, 生命周期

2021-12-21 20:27:28 472

原创 JVM class 对象, 类加载器以及类的主动使用和被动使用的概述

如何判断两个 class 对象是否相同?在 JVM 中表示两个 class 对象是否为同一个类存在两个必要条件:类的完整类名必须一致,包括包名加载这个类的 ClassLoader(指 ClassLoader 实例对象)必须相同换句话说,在 JVM 中,即使这两个类对象 (class 对象) 来源同一个 Class 文件,被同一个虚拟机所加载,但只要加载它们的 ClassLoader 实例对象不同,那么这两个类对象也是不相等的对类加载器的引用JVM 必须知道一个类型是由启动加载器加载

2021-11-29 21:41:33 143

原创 JVM 类加载器的分类与双亲委派机制(沙箱安全机制)

3. 类加载器的分类JVM 支持两种类型的类加载器: 分别为引导类加载器 (Bootstrap ClassLoader) 和自定义类加载器 (User-Defined ClassLoader)从概念上来讲,自定义类加载器一般指的是程序中由开发人员自定义的一类类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器无论类加载器的类型如何划分,在程序中我们最常见的类加载器始终只有 3 个:Bootstrap Class Loader

2021-11-29 21:38:49 266

原创 JVM 内存结构概述与类加载子系统

1. 内存结构概述2. 类加载子系统2.1 类加载器子系统的作用类加载器子系统负责从文件系统或者网络中加载Class文件, class文件在文件开头有特定的文件标识ClassLoader 只负责 class 文件的加载, 至于它是否可以运行, 则由Execution Engine 决定加载的类信息存放于一块称为方法区的内存空间。除了类的信息外, 方法区中还会存放运行时常量池信息, 可能还包括字符串字面量和数字常量 (这部分常量信息是Class文件中常量池部分的内存映射)class fil

2021-11-29 21:32:27 399

原创 解题记录 合唱队形 双向求最长上升序列

第一个问题,如何求最长上升序列题意: n 位同学站成一排,音乐老师要请其中的 n−kn-kn−k 位同学出列,使得剩下的 kkk 位同学排成合唱队形。合唱队形是指这样的一种队形:设 k 位同学从左到右依次编号为 1,2 … ,k,他们的身高分别为 t1,t2…,tk​,则他们的身高满足中间最高两边递减你的任务是,已知所有 n 位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形如果我们用常规dp做法的话,时间复杂度为n^2.for(int i = 1;i <= n; i++

2021-11-29 17:04:56 157

原创 KMP算法详解

KMP详解问题引入现在给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含返回包含位置的起始位置:string s1 = "bababababbabababababaccbbbbb";string s2 = "abacc";这个就是我们的字符串匹配问题那么我们如何来解决这个问题?常用暴力一个一个匹配是可行的,但是时间复杂度是O(m * n)这样的一个时间复杂度是非常高的,在针对较长字符串效率很低这也就是我们学习KMP算法的原因。KMP算法能够把时间复杂度降到O(m + n);

2021-11-28 12:28:46 157

原创 动态规划 背包模型

01背包例题引入:有N件物品和一个容量为V的背包。第 i 件物品的费用是w[i],价值是v[i],求将哪些物品装入背包可使价值总和最大。这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][j]表示前 i 件物品恰放入一个容量为 j 的背包可以获得的最大价值。则其状态转移方程便是:f[i][j] = max( f[i - 1][j], f[i - 1][j - w[i]] + v[i] )“将前 i 件物品放入容量为 j 的背包中”这个子问题,若只考

2021-11-28 12:25:25 245

原创 莫比乌斯函数 莫比乌斯反演

莫比乌斯反演莫比乌斯反演是数论中的重要内容。对于一些函数,如果很难直接求出它的值,而容易求出其倍数和或约数和,那么可以通过莫比乌斯反演简化运算,求得这个函数的值。开始学习莫比乌斯反演前,我们需要一些前置知识: 积性函数 、 Dirichlet 卷积 、 莫比乌斯函数 。数论分块:https://www.luogu.com.cn/problem/P2261#include <cstdio>#include <algorithm>#include <iostream&

2021-11-28 12:23:05 442

原创 博弈论与 sg 函数

博弈论定义 必胜状态 为 先手必胜的状态 , 必败状态 为 先手必败的状态 。通过推理,我们可以得出下面三条定理:定理 1:没有后继状态的状态是必败状态。定理 2:一个状态是必胜状态当且仅当存在至少一个必败状态为它的后继状态。定理 3:一个状态是必败状态当且仅当它的所有后继状态均为必胜状态。对于定理 1,如果游戏进行不下去了,那么这个玩家就输掉了游戏。对于定理 2,如果该状态至少有一个后继状态为必败状态,那么玩家可以通过操作到该必败状态;此时对手的状态为必败状态——对手必定是失败的,而相反

2021-11-28 12:11:34 2395

原创 大素数判定以及大整数分解

素数判定——Miller Rabin 算法#include <cstdio>#include <cstring>#include <cmath>#include <iostream>#include <string>#include <algorithm>#include <vector>#include <set>#define ll long long#include <map&gt

2021-11-28 12:10:07 481

原创 同余定理 逆元 中国剩余定理 费马小定理

同余定理同余定理是数论中的重要概念。给定一个正整数m,如果两个整数a和b满足(a-b)能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m)。两个整数a、b,若它们除以整数m所得的余数相等,则称a与b对模m同余或a同余于b模m同余性质反身性:a≡a (mod m)对称性: 若a≡b(mod m),则b≡a(mod m)传递性: 若a≡b(mod m),b≡c(mod m),则a≡c(mod m)同余式相加:若a≡b(mod m),b≡c(mod m

2021-11-28 12:09:00 489

原创 康托展开详解

康托展开总结:将每个数从头开始以N,N-1,N-2…作为编号对于编号i的数,给答案加上a[i]*(i-1)!其中a[i]表示比i小的数且在之前没出现过的数个数,乘以i-1的阶乘ans=a[N](N-1)!+a[N-1](N-2)!+a[N-2](N-3)!+…+a[1]*0!康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩。设有n个数(1,2,3,4,…,n),可以有组成不同(n!种)的排列组合,康托展开表示的就是是当前排列组合在n个不同元素的全排列中的名次。假设有

2021-11-28 11:52:42 440

原创 C/C++ __int128

用来处理 long long 处理不了的整数但是数据范围又在128位以内的#include <bits/stdc++.h>using namespace std;inline __int128 read(){ __int128 x = 0, f = 1; char ch = getchar(); while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; c

2021-11-28 11:50:15 1754

原创 组合数学(排列 组合 容斥 二项式 母函数)

组合数学排列Aab=a!(a−b)!A_a^b = \frac{a!}{(a - b)!}Aab​=(a−b)!a!​可重复排列数从 n 个物品可重复的取k个排列数为 nkn^knk错排问题n封不同的信, 编号分别是 1, 2, 3, 4, 5 现在要把五封信放在编号1, 2, 3, 4, 5的信封中, 要求信封的编号和信编号不同, 有多少种不同的放置方法n个人将各自的帽子混在一起后任取一项,求恰有k个人拿对自己的帽子的概率:错排问题的定义如下:给定n元素集合X,它的每一个元素都有一

2021-11-28 11:44:13 618

原创 SpringBoot 整合 Redis

Redis基于内存进行存储,支持 key-value 的存储形式,底层是用 C 语言编写的。基于 key-value 形式的数据字典,结构非常简单,没有数据表的概念,直接用键值对的形式完成数据的管理,Redis 支持 5 种数据类型:字符串列表集合有序集合哈希安装 Redis1、下载 Redishttps://redis.io/download2、解压,并在本地硬盘任意位置创建文件夹,在其中创建 3 个子文件夹bin:放置启动 Redis 的可执行文件db:放置数据文件et

2021-11-28 11:38:37 627

原创 dp + 容斥 硬币购物

题目链接: https://www.luogu.com.cn/problem/P1450题意:共有 4 种硬币。面值分别为 c1,c2,c3,c4某人去商店买东西,去了 n 次,对于每次购买,他带了 di 枚 i 种硬币,想购买 s 的价值的东西。请问每次有多少种付款方法。输入格式输入的第一行是五个整数,分别代表 c1,c2,c3,c4,n 范围: M = 1e5接下来 n (n <= 1000) 行,每行有五个整数,描述一次购买,分别代表 d1,d2,d3,d4,s解题思路:首先,

2021-11-17 19:16:27 330

原创 SpringBoot 整合 Redis 遇到 Unable to connect to Redis

在操作 Redis 的时候, 连接不上 Redis报错误: Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to X.X.X.X:6379spring: redis: host: 116.62.186.193 password: yy153016@ port: 6379 timeout: 2s lettuce: pool: # 连接池最大连

2021-11-16 13:23:43 2265

原创 Web项目前后端分离导致跨域问题的解决

在编写 SpringBoot 前后端分离项目时, 出现了一个问题: 前端无法得到后端响应的数据, 浏览器对请求进行了拦截原因: 前端调用的后端接口和前端不属于同一个域, 就会产生跨域问题, 也就是说你的应用访问了该应用域名或端口之外的域名或端口要同时满足三个条件才会产生跨域问题,这也就是为什么会产生跨域的原因。浏览器限制,而不是服务端限制请求地址的域名或端口和当前访问的域名或端口不一样发送的是 XHR(XMLHttpRequest)请求,可以使用 a 标签(模拟xhr请求)和 img 标签(模拟

2021-11-15 23:20:28 1520

原创 IDEA 实用快捷键

Ctrl + 左键 可以定位到源码位置Ctrl + Alt + B 把光标放在某一个方法上, 然后按下, 就会出现很多重写了该方法的类Ctrl + Alt + Shift + U 把鼠标放在要查看的类上面, 然后按下, 或者右键 -> Diagrams -> Show Diagram 可以看到继承关系Crtl + H 打开继承树Shift + Shift 查找类Ctrl + N 搜索类Debug 模式中选中要计算的变量然后右键选择 Evaluate Expression**Ctrl

2021-11-15 14:05:16 239

原创 Mybatis-Plus 快速入门 SpringBoot 整合 Mybatis-Plus

MyBatis Plus国产的开源框架,基于 MyBatis核心功能就是简化 MyBatis 的开发,提高效率。MyBatis Plus 快速上手Spring Boot(2.3.0) + MyBatis Plus(国产的开源框架,并没有接入到 Spring 官方孵化器中)1、创建 Maven 工程2、pom.xml 引入 MyBatis Plus 的依赖<dependency> <groupId>com.baomidou</groupId>

2021-11-14 22:35:20 297

原创 组合数学 - Bus Number

题目链接: https://codeforces.com/problemset/problem/991/E题意:给你一个数字字符串, 长度不超过18位, 问多少个序列满足:字符串中所有出现过的数字在序列中至少出现一次字符串的某一数字的出现次数要大于等于序列中该数字出现的次数序列不能是 0 开头 (公交车牌号肯定不是0开头= =)思路: 数字字符串的长度不超过18位, 可以考虑搜索出所有的数字组合情况, 然后求当前数字组合情况的方案数, 方案数可以先包含 0 开头的情况, 然后减去 0 开头的

2021-11-01 19:09:51 405

原创 组合数学 - Count the Arrays

题目链接: https://codeforces.com/problemset/problem/1312/D题意:计算数组的数量使得:每个数组包含 n 个元素每个元素都是 1 到 m 的整数每个数组恰好有一对相等的元素每个数组 a 都存在一个索引 i , 使得该数组在第 i 个元素之前严格升序并在它之后严格降序思路: 由题意可知, 数组的长度为 n, 且有一个最大元素, 也有一对恰好相等的元素. 先不考虑这一对相等的元素, 考虑剩下的 n - 1 个元素, 我们需要选出 n - 1 个元素,

2021-11-01 15:18:17 136

原创 组合数学 - The Intriguing Obsession

题目链接: https://ac.nowcoder.com/acm/contest/21791/E题意:岛上有三种颜色的岛屿,分别是红色、蓝色和紫色。岛群分别由 a, b 和 c 个分别为红色, 蓝色和紫色的岛组成在一些 (可能全部或没有) 岛屿之间建立了桥梁。一座桥双向连接两个不同的岛,长度为1。对于任意两个相同颜色的岛,要么不能通过桥相互到达,要么它们之间的最短距离至少为 3思路: 由题意可知, 同一个岛群的岛屿不能建立桥, 两个相同颜色的岛屿不能连接到一个颜色不同的岛屿, 两个岛想要连边, 那

2021-11-01 15:01:17 130

原创 计算机组成原理第三部: 总线与IO系统

总线的概念与分类总览:总线是一组能为多个部件分时共享的公共信息传送线路。共享是指总线上可以挂接多个部件,各个部件之间互相交换的信息都可以通过这组线路分时共享。分时是指同一时刻只允许有一个部体向总线发送信息,如果系统中有多个部件,则它们只能分时地向总线发送信息。为什么要用总线?早期计算机外部设备少时大多采用分散连接方式,不易实现随时增减外部设备。为了更好地解决I/O设备和主机之间连接的灵活性问题,计算机的结构从分散连接发展为总线连接。总线特性:1.机械特性:尺寸、形状、管脚数、排列顺序2.

2021-10-28 13:54:19 3921

原创 计算机组成原理第二部: 存储系统与指令系统

主存简单模型和寻址概念主存储器的基本组成:存储体, MAR (Memory Address Register), MDR存储元 --> 存储单元 (内容是存储字) --> 存储体主存储器简单模型:寻址:存储器芯片的基本结构:译码驱动电路存储矩阵读写电路地址线, 数据线 (推出容量等等), 片选线, 读写控制线 (可能是一根或两根)寻址:按字节, 字, 半字, 双字寻址多字节存放: 大端方式与小段方式...

2021-10-28 09:27:53 1012

原创 Shiro 快速入门 SpringBoot 整合 Shiro

ShiroApache Shiro 是 Java 的一个安全框架。使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西不依赖任何容器, 可以运行在 JAVA SE 和 JAVA EE 项目中, 主要作用是对访问系统的用户进行身份认证, 授权, 会话管理, 加密等操作Shiro 就是用来解决安全管理的系统化框架Shiro 核心组件用户, 角色, 权限给角

2021-10-22 21:53:25 149

原创 SpringBoot data&Junit5&Actuator&Features

数据访问SQL1.0 数据源的自动配置-HikariDataSource导入 JDBC 场景<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId></dependency>没有导入数据库驱动, 因为官方不知道我们接下来要操作的数据库数据库

2021-10-22 21:47:26 712

原创 SpringBoot Web开发与源码分析

SpringBoot 快速入门概念性的东西见: https://www.yuque.com/atguigu/springboot/rmxq85需要环境: jdk8 & 兼容java14, maven 3.3+, idea 219.1.2maven设置:去到 maven 的配置文件中修改添加:<mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf&

2021-10-15 18:54:40 803

原创 排序算法详细总结

排序算法总结常见的快速排序、归并排序、堆排序、冒泡排序 等属于比较排序 。在排序的最终结果里,元素之间的次序依赖于它们之间的比较。每个数都必须和其他数进行比较,才能确定自己的位置 。在冒泡排序之类的排序中,问题规模为n,又因为需要比较n次,所以平均时间复杂度为O(n²)。在归并排序、快速排序之类的排序中,问题规模通过分治法消减为logN次,所以时间复杂度平均O(nlogn)。比较排序的优势是,适用于各种规模的数据,也不在乎数据的分布,都能进行排序。可以说,比较排序适用于一切需要排序的情况。计数排序、

2021-10-07 10:39:20 283

原创 计算机组成原理第一部: 计算机发展到加法器ALU的改进

计算机组成原理计算机发展历程硬件的发展:电子管时代晶体管时代中小规模集成电路时代大规模, 超大规模集成电路时代发展趋势:更微型, 多用途更巨型, 超高速计算机硬件的基本组成冯.诺伊曼计算机特点:计算机由五大部件组成 (输入设备, 运算器 (算术运算, 逻辑运算), 主存储器 (存放数据和程序), 控制器 (指挥各部件, 使程序运行), 输出设备)指令和数据以同等地位存于存储器, 可按地址寻访指令和数据用二进制表示指令由操作码和地址码组成存储程序以运算器为中心现

2021-08-30 19:54:05 1042

原创 解题记录 LeetCode 最小覆盖子串 滑动窗口较复杂题

题目链接: https://leetcode-cn.com/problems/minimum-window-substring/题意: 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。**思路: ** 滑动窗口 维护哈希表 need 和 len, 思路不难, 写起来挺复杂的class Solution { public String

2021-07-06 17:17:19 70

原创 解题记录 LeetCode 无重复字符的最长子串 滑动窗口

题目链接: https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/**题意:**给定一个字符串,请你找出其中不含有重复字符的 连续最长子串 的长度。**思路: **其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列!如何移动?我们只要把队列的左边的元素移出就行了,直到满足题

2021-07-06 16:14:09 74

原创 解题记录 LeetCode 快乐数 模拟判环

题目链接: https://leetcode-cn.com/problems/happy-number/**题意:**编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 true ;不是,则返回 false 。思路: 不断模拟, 看有无环, 注意: 不会出现值会越来越大,最后接近无

2021-07-06 10:50:07 71

原创 解题记录 LeetCode 数字 1 的个数 数学规律题

题目链接: https://leetcode-cn.com/problems/number-of-digit-one/题意: 求小于等于 n 的数中1出现的个数思路: 暴力超时, n 范围 2 * 1e9, 所以需要找规律, 易发现个位上每增加十个数, 个位就会出现一次1, 十位上每增加100个数会出现10次1, 以此类推, 但是由于 n 不是一个能被10整除的数, 所以还有末尾细节需要处理代码:class Solution { public int countDigitOne(int n)

2021-07-06 10:16:26 66

原创 解题记录 LeetCode 下一个更大元素 II 单调栈

题目链接: https://leetcode-cn.com/problems/next-greater-element-ii/题意:给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。思路:我们可以使用单调栈解决本题。单调栈中保存的是下标,从栈底到栈顶的下标在数组nums 中对应的值是单调不升的。每次我们移动

2021-07-05 11:42:48 109

原创 解题记录 LeetCode 下一个更大元素 单调栈

题目链接: https://leetcode-cn.com/problems/next-greater-element-i/题意: 给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。思路:由于数组nums1是nums2的子集,整体思路是先

2021-07-05 11:16:27 52

原创 解题记录 LeetCode 单词拆分 II

单词拆分 II题目链接: https://leetcode-cn.com/problems/word-break-ii/比单词拆分要难一点, 本质来说也是一个记忆化搜索, 但是需要用到哈希表来加速题意: 把能拆分的单词间隔空格编程句子, 返回所有可能的句子说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。思路:见代码, 思路要清晰, 关键在于 map 的定义, 用下标对应下标后面的句子集来进行加速, 否则要T对于字符串 s,如果某个前缀是单词列表中的单词,则拆分出该

2021-07-04 17:05:32 92

原创 解题记录 LeetCode 单词拆分

单词拆分题目连接: https://leetcode-cn.com/problems/word-break/一道比较经典的动态规划的题目, 当然也可以用记忆化搜索来做, 本质是差不多的题意: 把 s 拆分成一个或多个在字典中出现的单词说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。思路:状态定义:我们把 dp[i] 来表示前 i 个字符串拆成单词是否是字典中单词之一状态计算:dp[j] = dp[i] && check(s[i ~ j - 1]

2021-07-04 14:55:51 57

空空如也

空空如也

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

TA关注的人

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