- 博客(131)
- 收藏
- 关注
原创 2021昆明ICPC的L题代码
比赛生涯的最后一发AC#include <bits/stdc++.h>using namespace std;typedef pair<int, int> PII;const int N = 1e6 + 10;int n, t;int a[N];int color[N];struct Node { int l, r; int sum, maxv, lazy; void update(int x) { sum += (r .
2021-04-07 10:39:57
343
3
原创 leetcode 146. LRU 缓存机制
题目传送门:力扣链接:https://leetcode-cn.com/problems/lru-cache/题解:LRU是最近最少使用算法,可以通过一个hash表对应key, value,问题在于如何记录谁是最久没用过的,我们可以采用一个双向链表,如果某个结点被使用了,那么就把他放在链表的最左侧,这样如果容量不够需要删除了,最右侧的那个就是最久没使用过的了。Code:class LRUCache {public: struct Node { int key, va
2021-03-19 15:00:39
139
2
原创 leetcode 126. 单词接龙 II
题目传送门力扣链接:https://leetcode-cn.com/problems/word-ladder-ii/题解:根据题意,首先我们得看一下endWord在不在list中,如果不在直接返回一个空的即可。如果在的话,那么我们可以先用bfs跑一边,求出beginWord到endWord的距离,同时也求出了beginWord到中间路径上的点的距离,当所有距离计算出来之后,我们只需要从endWord反向dfs搜索一遍,每次变换一个字符,如果变换之后存在这个字符串并且已经计算过距离且距离之差为1,
2021-03-19 14:52:18
236
1
原创 leetcode 315. 计算右侧小于当前元素的个数
题目传送门力扣链接:https://leetcode-cn.com/problems/count-of-smaller-numbers-after-self/题解:可以暴力做,枚举右侧的点有多少个小于当前点。但是这种O(n^2)的做法会导致超时。我们统计的时右侧有多少个比当前点小的,那么从右向左侧枚举,我们需要一种操作,可以快速给比当前点大的数都加一,还需要一种操作,可以快速求出比当前点小的数有多少个。样例如下图:从右侧的1开始,因为一开始没有任何的数据插入,所以比它小的一定是0个之后
2021-03-19 14:37:37
161
1
原创 leetcode 268. 丢失的数字
题目传送门力扣链接:https://leetcode-cn.com/problems/missing-number/题解:从0到n之间有一个数字不在数组中,我们将0~n这些数字加起来,减去数组中数字的总和就是答案。Code:class Solution {public: int missingNumber(vector<int>& nums) { int sum = nums.size(); for (int i = 0; i &
2021-03-19 14:06:00
113
原创 leetcode 406. 根据身高重建队列
题目传送门:力扣链接:https://leetcode-cn.com/problems/queue-reconstruction-by-height/题解:该题核心是让我们讲被打乱的数组还原。满足在当前位置 i 左面身高大于等于他的身高的人有 ki 个。我们可以从身高最矮的人下手,我们找到最矮的那个人,无论他处于什么位置,他左面有多少个人,那他左面比他高的人就有多少个。 这第一个人的位置就确定了,ki 是几,我们就把这个人放在哪个位置上。然后看第二矮的人,这时候第一个人对于第二个人来说毫无意
2021-03-18 22:03:50
132
原创 leetcode 415. 字符串相加
题目传送门力扣链接:https://leetcode-cn.com/problems/add-strings/题解:模拟题,官方的题解是通过i, j两个指针去相加字符串的每一位,从后往前加,然后加到res上,用add来保存进位是多少,如果 i, j某一个到头了,那么默认他的一位是0,这样模拟出结果。这里我们的思路是保证第一个字符串比第二个字符串长(不是的话交换字符串即可),然后反转两个字符串,算一下两个字符串差多少位,给第二个字符串补上对应个数的0,这样操作之后我们可以保证两个字符串的长度相同
2021-03-18 21:33:59
103
原创 leetcode 46. 全排列
题目传送门力扣链接:https://leetcode-cn.com/problems/permutations/题解:使用dfs,暴力搜索所有的情况。每一层枚举所有未被使用过的点,然后打上标记告诉后面不能再用这个数字了(题目说明了没有重复数字,所以可以这样打标记),继续搜索下一层即可。这里可以发现枚举所有未被使用过的点,也就没法剪枝。Code:class Solution {public: vector<vector<int>> res; // 记录答案
2021-03-18 21:22:07
126
原创 原型模式
1. 基本介绍原型模式指用原型实例指定创建对象的种类,并且通过拷贝创建新对象。原理简单说就是对象.clone()public class Sheep implements Cloneable { private String name; private int age; private String color; public Sheep(String name, int age, String color) { this.name = nam
2021-03-03 20:57:48
129
2
原创 工厂设计模式
1. 简单工厂模式简单工厂模式属于创建型模式,简单工厂模式是由一个工厂对象绝对创建出哪一种产品类的实例,是工厂模式中最简单实用的模式。简单工厂模式:定义一个创建对象的类,由这个类封装实例化对象的行为当使用搭配大量的创建某种、某类、某批对象时,会用到工厂模式。public class SimpleFactory { public Product createProduct(String type) { switch (type) { case
2021-03-03 20:43:32
137
1
原创 单例设计模式
1. 介绍单例模式就是采取一定的方法保证整个软件系统中,某个类只存在一个对象实例,并且改类只提供一个取得其对象实例的方法。比如Hibernate的SessionFactory,充当数据存储的代理,负责创建Session对象,一般来说只需要一个SessionFactory,这就会用到单例模式。2. 八种方式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(安全,同步方法)懒汉式(安全,同步代码块)双重检查静态内部类枚举3. 饿汉式3.1 静态常量构造器私有
2021-03-03 19:38:54
119
4
原创 力扣139. 单词拆分
题目链接题目给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。分析:最暴力的想法是直接搜索,枚举每一段看看是否有对应的单词,复杂度O(2^n)采用动态规划的方法:状态表示:f[i]表示前i个字符是否可以拆分成字典中的单词状态转移:如果 1 ~ i之间的某个位置j可以满足f[j] = true并且j + 1 ~ i这一段是一个
2021-03-03 13:01:16
136
原创 力扣138. 复制带随机指针的链表
题目链接给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。
2021-03-03 12:55:04
835
原创 力扣137. 只出现一次的数字 II
题目链接给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?分析:这题不像上一题,出现两次直接异或就抵消了,异或三次结果和异或一次是一样的。可以采用状态机的思想,用两个变量one two当数字x的某一位是1并且出现一次,one的对应位变1,two的对应位为0当数字x的某一位是1并且出现两次,one的对应位变0,two的对应位变1当数字x的某一位是1并且出现三次,
2021-03-03 12:52:42
122
原创 设计模式七大原则
七大原则:1. 单一职责原则1.1 基本介绍1.2 代码示例1.3 注意事项和原则2. 接口隔离原则2.1 基本介绍2.2 代码示例3. 依赖倒置原则3.1 基本介绍3.2 代码示例3.3 注意事项4. 里氏替换原则4.1 面向对象的继承性4.2 基本介绍4.3 代码示例5. 开闭原则5.1 基本介绍5.2 代码示例6. 迪米特法则6.1 基本介绍6.2 代码示例6.3 注意事项7. 合成复用原则7.1 基本介绍7.2 代码示例1. 单一职责原则1.1 基本介绍对类来说,一个类应该只负责一项职责。如
2021-03-02 21:29:02
100
原创 力扣136. 只出现一次的数字
题目链接给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?输入: [2,2,1]输出: 1分析:如果他不要求不使用额外空间,我们可以开一个哈希表来存,然后扫一遍看看出现几次就行了。如果他不要求线性复杂度,那么两次循环也找出来了。现在都要求,那么就需要用异或^的性质了异或的特点是相同为0,不同为1,那么两个相同的数异或就是0,只有一个元素出现一次,其余的都出现
2021-03-02 12:45:39
134
原创 力扣135. 分发糖果
题目链接老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?输入:[1,0,2]输出:5解释:你可以分别给这三个孩子分发 2、1、2 颗糖果。分析:题目的要求就是给每个位置一个数字,满足至少是1且如果当前权值如果大于两侧权值,那当前数字也要大于旁边数字。就是一
2021-03-02 12:41:12
118
原创 力扣134. 加油站
题目链接在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。输入:gas = [1,2,3,4,5]cost = [3,4,5,1,2]输出
2021-03-02 12:32:09
109
原创 力扣133. 克隆图
原题链接题目过长,不复制了简单来说就是给个图,然后让完全复制一份,不能引用原来的结点,就是不能直接return原来的node,也不能新创建一个node把临边赋值一份就算完。分析:这直接dfs一遍或者bfs一遍就行了,第一种思路是先创建结点,然后用一个哈希表去把原结点和复制结点一一对应,在跑一边,把边连上即可。另一种思路是同时复制边和点。/*// Definition for a Node.class Node { public int val; public List&
2021-03-01 17:40:56
206
原创 力扣132. 分割回文串 II
题目链接给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回符合要求的最少分割次数。输入: "aab"输出: 1解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。分析:如果按照上一题的写法,应该是求出来所有方案,然后求一下每个List中的元素个数,取一个min再减一就是答案。但是我估计大概率超时。思路:通过dp,用 dp[i] 表示前 i 个数分割成每个子串都是回文串至少分出多少个(即答案数 + 1)状态转移:可以枚举 i 前面的点
2021-03-01 17:26:33
141
原创 力扣131. 分割回文串
题目链接给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。输入: "aab"输出:[ ["aa","b"], ["a","a","b"]]分析:最坏的情况是所有字母都相同,类似于aaaaaaaa,那么这8个a就有七个位置可以插入,因为全都一样,所以无论怎么分割都满足每个子串都是回文串,那结果就有2^n种。所以最坏情况是指数级别。那可以直接搜索。搜索思路:按找每一段来搜索,起点为u,终点从u枚举到最后,如果能形成回文串,那就是一种
2021-03-01 17:07:51
122
原创 《Java面试刷题》第一篇 类集
集合:1. 集合的架构2. 常见集合的底层实现3. 常见问题3.1 ArrayList和Vector的区别3.2 ArrayList和LinkedList的区别3.3 HashMap的底层3.4 HashMap与HashTable的区别3.5 HashMap的负载和容量问题1. 集合的架构从该图可以直观的看出整个结构,java集合包含了两种类型的容器:Collection:存储元素集合Map:存储kv映射Collection接口又有三种子类型:SetListQueue后面又是一些
2021-02-20 18:23:59
195
1
原创 《LeetCode面试刷题》第二篇
题目:1. 第79题 单词搜索2. 第80题 删除排序数组中的重复项 II3. 第81题 搜索旋转排序数组 II4. 第82题 删除排序链表中的重复元素 II5. 第83题 删除排序链表中的重复元素6. 第84题 柱状图中最大的矩形7. 第85题 最大矩形8. 第86题 分隔链表9. 第87题 扰乱字符串10. 第88题 合并两个有序数组11. 第89题 格雷编码1. 第79题 单词搜索题目地址给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构
2021-02-20 13:50:24
242
1
原创 《LeetCode面试刷题》第一篇
题目:1. 第73题 矩阵置零2. 第75题 颜色分类3. 第78题 子集1. 第73题 矩阵置零题目地址给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。这题如果不适用原地算法非常简单,可以用做初学者的数组练习题,直接开一个n * m的矩阵,然后让它的元素和原数组完全对应,之后遍历原数组的每一个元素,如果是0在新数组改变对应行列的元素即可。(时空复杂度较高)如果空间复杂度压缩到O(n + m)的话,我们只需要开两个一维数组,记录行列是否存
2021-02-19 16:51:11
129
1
原创 docker安装与部署
1. 安装docker安装:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun添加镜像:在/etc/docker/daemon.json中添加{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}并重启服务sudo systemctl daemon-reloadsudo systemctl restart docker2. 命令启动与停止:启动
2021-02-16 14:05:30
281
原创 阿里云服务器安装rabbitmq
这个东西在阿里云的centos7上异常鬼畜,这次终于安上了步骤1. 安装erlang2. 安装rabbitmq3. 启动和web管理1. 安装erlangrabbitmq是erlang开发的,所以要先安装erlang安装依赖:yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel下载包:wget http://erlang.org/dow.
2021-02-14 20:27:09
375
1
原创 SpringCache加Redis做缓存
Redis + SpringCache1. 添加依赖<!-- redis --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- spring2.X集成redis所需common-poo
2021-02-09 21:20:56
376
原创 hystrix如何使用
1. Hystrix概念Hystrix 是一个供分布式系统使用,提供延迟和容错功能,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。比如系统中有很多服务,当某些服务不稳定的时候,使用这些服务的用户线程将会阻塞,如果没有隔离机制,系统随时就有可能会挂掉,从而带来很大的风险。SpringCloud使用Hystrix组件提供断路器、资源隔离与自我修复功能。说简单点就是它在系统某些服务出问题的时候,有备选方案,不至于让整个系统挂掉2. 添加依赖<dependency> <
2021-02-08 22:58:06
668
原创 feign如何使用
1. Feign的基本概念Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。(说人话就是原来我们可以用restTemplate和okhttp调用,但是有些问题不好处理,现在我们用它了)Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等pring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。Spring C
2021-02-08 22:57:16
3325
1
原创 nacos如何下载并启动
1. 这是什么nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。nacos致力于帮助您发现、配置和管理微服务。nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。 nacos是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。2. 常见的注册中心eureka:原生注册中心zookeeper:可以配合d
2021-02-08 22:52:32
712
原创 EasyExcle
EasyExcel1. 导入依赖2. 写操作3. 读操作1. 导入依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.1</version></dependency><!-- 还需要POI的3.17 -->2. 写操作@Data
2021-02-04 23:53:59
243
原创 vue路由切换导致的渲染问题
问题:vue-router导航切换 时,如果两个路由都渲染同个组件,组件会重组件的生命周期钩子(created)不会再被调用, 使得组件的一些数据无法根据 path的改变得到更新解决:用watch监听路由的变化,这样不会重新执行created,但是使用同样的代码即可。export default { data{ return {} }, // ..... watch: { $route(to, from) { // 逻辑代码
2021-02-03 16:15:30
688
原创 npm以及es6等概念
前端内容NPM初始化下载依赖BabelES6 转ES5安装转码器转码模块化ES6的模块化webpackNPM初始化npm initnpm init -y 所有的都是默认下载依赖npm install ?指定版本npm install ?@version配置镜像:http://npm.taobao.org命令:npm config set registry http://registry.npm.taobao.org查看:npm config list根据package.json下载依赖:
2021-02-02 14:40:24
495
原创 logback日志配置
日志记录器行为级别OFFFATALERRORWARNINFODEBUGALL默认只显示INFO信息,下面的包含上面的设置日志级别:只能在控制台输出logging.level.root=WARNLogback将日志输出到文件中,使用日志工具删除application.properties的配置删掉logging.level.root和mybatis-plus.configuration.log-impl这些resources中创建logback-spring.xml(固
2021-02-01 12:49:54
297
1
原创 vue路由
1. 加载vue文件vue.min.jsvue-router.min.js2. 写对应的路由超链接<div id="app"> <p> <!-- 这里显示首页,第二页,第三页 --> <!-- 点击跳转 --> <router-link to="/">首页</router-link> <router-link to="/page2">第二页&
2021-02-01 12:49:13
59
原创 springboot如何使用swagger进行测试
整合Swagger进行接口测试两个主要方面:生成在线接口文档接口测试<!--swagger--><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <scope>provided </scope></dependency><de
2021-01-31 16:19:19
280
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人