自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 实现前缀树

前言这道题做完,成就感还是满满当当的,嘿嘿!(虽然时间复杂度不是很好,但是空间复杂度很好看)题目描述Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类: Trie() 初始化前缀树对象。 void insert(String word) 向前缀树中插入字符串 word 。 boolean search(String word) 如果...

2022-03-31 18:42:12 739

原创 课程表--力扣Hot100

题目描述你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。示例

2022-03-31 17:02:52 1891

原创 LRU缓存

题目描述请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。 void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 ke...

2022-03-19 13:35:01 1127

原创 二叉树的直径+二叉树的最大路径

题目描述第一题--给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。来源:力扣(LeetCode)链接:ht...

2022-03-18 14:04:04 323

原创 priority_que<元素类型,容器类型,比较类型>自定义比较类型

前言很早之前接触算法时就遇到了一些题目需要使用优先队列(也是大顶堆和小顶堆)的数据结构,但是对它的初始化和表示的含义一直不太明辨,今天就来说一下最近的理解.希望能够给大家一定的启发.大顶堆?小顶堆?为什么叫做大顶堆?因为这个堆的top()函数返回的值就是当前堆的最大值,所以取名叫做大顶堆,同理top()函数返回的是最小值,所以叫做小顶堆.初始化函数不知道大家有没有和我一样的感觉,堆的初始化方式及其麻烦,我们先来看看他的初始化方式--priority_queue<元素类型,适配器

2022-03-11 16:31:36 1391

原创 翻转字符串里的单词

题目描述给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。说明: 输入字符串 s 可以在前面、后面或者单词间包含多余的空格。 翻转后单词间应当仅用一个空格分隔。 翻转后的字符串中不应包含额外的空格。示例 1:输入:s = "the sky is blue"输出:"blue is sky the"示例 2:...

2022-03-07 11:38:43 158

原创 四数之和一二

双指针+哈希map-----YYDS!!!

2022-02-22 14:28:59 177

原创 丑数--动态规划

题目描述我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1是丑数。n不超过1690。思路根据动态规划五部曲:1)dp[i]表示第 i 大的丑数2)递推公式:我们有dp[i],那么dp[i+1]可以由dp[p1]*2,dp[p2]*3,dp[p3]*5,p1,...

2022-02-20 21:32:13 622

原创 一路风雨,写篇杂文来纪念自己到了五级

时光从来不会因为谁不舍或难过而停止或者加快脚步,它有着自己的韵律和优雅,迈着高傲于人间一切的步伐,向前走着,只是走.年底自己就要面对人生的又一场挑战--考研,说不紧张是假的,但是真的紧张吗?大可不必,自信人生二百年,会当击水三千里,为了追求自己的幸福,这些挑战,再怎么样也要咬牙通过,相对于同龄人的稚嫩和悲观,我显得更加乐观,但这样的乐观也是以悲观为核心的,就像是三体中的思维钢印那样,或者说,我知道生活中不如意之事十有八九,但是我还是愿意去乐观地思考问题,看待问题,对于那些看到的解决不了的,我保持接受和无

2022-02-09 17:13:50 330

原创 狂神说springboot笔记

笔记链接

2022-02-07 18:08:48 920

原创 三层架构和MVC三层架构的区分

web项目的三层结构视图层,业务逻辑层,持久层(1)视图层:视图层很好解释 你现在看到的网页 一些界面 都属于表现层的东西可以用一些HTML,CSS,JS,VUE来实现(2)业务逻辑层:业务层用来实现整体的业务逻辑 如 前台获得了数据,逻辑层去解析这些数据,效验这些数据等操作(3)持久层:持久层用来固化数据,如常说的DAO层,操作数据库将数据入库MVC三层架构Modle层:可以分两层,DAO层、service层,基文本功能 如下service层:主要去负责一些业务处理,比如取得连.

2022-02-07 15:45:11 268

原创 动态规划--不同的子序列

前言这道题绝对是我目前做过的题中数一数二难的,思路太过于清奇,让我一时难以接受,所以还需要多多回味,加以消化.题目描述思路动态规划五部曲1) 规定dp[i][j]的含义:表示s[0,i-1]中出现t[0,j-1]的次数2)递推方程:if(s[i-1]==t[j-1]) dp[i][j]=dp[i-1][j-1]+dp[i-1][j]可以这样理解:s="rara" ,t="ra" i-1==3,j-1==1,此时我们可以选择两种匹配方式,一种是拿后面的r和a,和t中的"ra".

2022-02-05 20:20:32 629

原创 动态规划--编辑距离(上)

题目描述:2.判断子序列3.两个字符串的删除操作思路这三道题其实都是一类题:操作字符串 使得两个字符串相等或者使得一个为另一个的子字符串,判断子序列可以通过判断两个字符串的最长子序列长度是否和短的那个相等.下面我们着重讲解一下编辑距离这道题目:1)规定dp[i][j]表示使得t[0,i-1]到t[0,j-1]相等的最少操作次数2)递推公式:如果s[i]==t[j],说明不需要操作,dp[i][j]==dp[i-1][j-1],如果不相等的话,我们有三种选择:删..

2022-02-05 20:03:06 791

原创 动态规划--回文串系列

1.最长回文子串2.前言动态规划回文串系列一直是我的一个痛点,今天上午看了书,本以为已经完全看懂了,结果下午闭书敲代码,敲了一下午还没有搞定,哎,果然代码不是靠看懂的,中间思考过程的艰深,只有敲过了代码才能感受到.思路dp五部曲:1)确定dp[i][j]含义,这一步最重要,也是最难抉择的,为什么说最难抉择呢?到底dp[i][j]表示以下标[i,j]的字符串还是下标[i+1][j-1]的字符串呢?还是下标[i-1][j-1]的字符串呢?我们选择下标[i][j]的字...

2022-02-05 17:39:31 1362

原创 N皇后问题和解数独

问题描述n皇后问题 研究的是如何将 n个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的n皇后问题 的解决方案。每一种解法包含一个不同的n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。示例 1:输入:n = 4输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]解释:如上图所示,4 皇后问题存在两个不同的解法。...

2022-01-26 18:02:11 220

原创 排列(元素重复和不重复情况)--回溯算法

题目描述输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = "abc"输出:["abc","acb","bac","bca","cab","cba"]限制:1 <= s 的长度 <= 8思路回溯三部曲:1)确定递归函数的参数排列问题需要used数组.2)递归终止的条件叶子节点就是收割结果的地方,终止判断条件if(nums.size()==path.si.

2022-01-26 14:16:21 1260

原创 队列的最大值和滑动窗口的最大值

题目描述给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释: 滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7 31 3 [...

2022-01-25 22:47:20 130

原创 剪绳子二力扣

题目描述给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m - 1] 。请问 k[0]*k[1]*...*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入: 2输出: 1解释:

2022-01-22 17:58:14 335

原创 和为S的序列

题目描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:1 <= target <= 10^5思路利用题目中给定的序列连续的特点,我们想到等差数列求和公式.我.

2022-01-22 17:27:49 395

原创 螺旋矩阵+栈的压入弹出顺序

题目描述给你一个 m 行 n 列的矩阵matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]提示:m == matrix.lengthn == matrix[i]...

2022-01-22 17:21:34 94

原创 约瑟夫环数组解法

题目描述题目就是N个人,每第M号淘汰,输出最后选中的那位的序号.思路我们设置一个vector数组,每一个数组都是先预处理为下标 i 的数值,每一次第 M 号被淘汰,我们就选择将这个位的值置为-1,同时移动下标pos,自减一个提前设置好的初始值等于N的这样一个变量sum. 如果 当前位本来就是被访问过得,我们就移动到下一位.代码(逻辑很简单)class Solution {public: int lastRemaining(int n, int m) { vector<in

2022-01-20 20:52:32 815

原创 数值的整数次方

前言第一次接触快速幂运算还是大二上学期,当时就惊叹于它的高效率和适用性,尤其是它是出自一个拿过ACM的银牌大牛给我讲述,这个题在我当时幼小的心灵中留下了难以磨灭的印象.题目描述实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.10000, n = 3输出:9.26100示例 3:输入:x = 2.000

2022-01-16 11:17:54 255

原创 二叉树的后序遍历序列

题目描述思路说实话,我第一眼看到这个题目,一点思路都没有,除了知道二叉树后序遍历遵循"左右根"的遍历方式以外其他的什么都不知道,两眼一抹黑....后来看了题解又摸索着自己写,写来写去,都有问题,emmm,看别人写的十分简洁,自己写的一堆废话.实在是让我汗颜........后来不得已去看了K神的题解.K神,YYDS正文思想就是分治递归,我们寻找第一个大于最后一个元素的节点,保存这个位置的index,然后移动当前下标直到到达right,凭借postorder[right]将数..

2022-01-15 19:42:39 667

原创 数据流中的中位数

目录题目描述思路代码题目描述中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)addNum(2)findMedian() -

2022-01-11 17:26:46 91

原创 最小的K个数

题目描述思路一先排序,排完序后输出前K个数字即可,使用系统自带的sort函数.思路二使用一个堆来维持最小的K个数字,那么我们应该选择小根堆还是大根堆呢?我们如何使用小根堆,那么top函数返回值为当前的最小值,我们想要边遍历边更新堆,那么每次淘汰的都应该是当前堆里面最大的数值,那么应该使用大根堆这种数据结构,这种数据结构对应的是priority_queue<int> que;具体代码见下:代码class Solution {public: vect..

2022-01-11 15:01:50 274

原创 把数组排成最小的数

题目描述思路一开始我误解了题意,卡了半天不知道为啥错,最后发现对于23,20,2,2这四个数字,是不能拆分为2,3,2,0,2,2的.应该只是这几个数字的组合.那么我们如何判断30,34这两个数字到底是3034大,还是3430大呢?又比如34,3这两个数字,到底是343好呢,还是334好呢,比较两个字符串,我们就能知道应该选择哪一种组合方式,那么我们在使用algorithm头文件里面的sort()时,在写cmp函数时,逻辑就是比较两种不同的组合到底谁更小一些.代码class So..

2022-01-11 14:46:57 233

原创 二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。特别地,我们希望可以就地完成转换操作.

2022-01-09 15:29:24 412

原创 矩阵中的路径

前言这道题我折腾了一个半~两个小时,终于AC了,特此纪念.题目描述给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 "ABCCED"(单词中的字母已标出)。示例 1:输入:board = .

2022-01-08 17:32:19 64

原创 机器人的运动范围

思路按照DFS模板来套,递归三部曲:返回值:NULL中间逻辑:访问位置为true,数量统计count++返回逻辑:如果当前的和val>k或者当前位已经访问过了,直接返回.代码class Solution {public: int a[4] = { -1,1,0,0 }; //行,上下左右 int b[4] = { 0,0,-1,1 }; //列,上下左右 int count=0; int sum(int i, int j) {..

2022-01-08 17:18:15 396

原创 最长不含重复字符的子字符串

题目描述思路状态方程:dp[i]表示以str[i]结尾的最长无重复字符的数量,对于当前的字符s[i],如果之前相同的字符出现在dp[i-1]之外的范围内,则dp[i]=dp[i-1]+1,如果出现在dp[i-1]之内的范围,那么dp[i]=i-temp.(temp表示上一次相同字符出现的位置,可以使用hash表的KEY-VAL来映射)初始化:dp[0]=1;递推顺序:从前到后代码class Solution {public: int lengthOf..

2022-01-07 20:13:53 302

原创 把数字翻译成字符串

题目描述思路这道题和上台阶非常相似,要么一次是上一级,还是一次上两级.dp[i]表示以nums[i]为结尾的翻译的方法种类数.如果dp[i-1]与dp[i]组合而成的字符串在10~25之间,说明可以进行组合,如果不在这个区间之内,那么等于旁边的dp[i-1]的种类.我们在初始化时,dp[0]=1,表示第一位只有一种翻译方法,但是dp[1]要判断是1,还是2.我们当前dp[i]取决于dp[i-1]和dp[i-2],因为只有两种方法能够到达现在.#include<i.

2022-01-07 19:51:16 343

原创 连续子数组的最大和

思路一--暴力破解思路二--动态规划动态规划五部曲:第一步:确定dp函数,dp[i]表示以nums[i]结尾的数组最大连续和第二步:确定递推公式:dp[i]=max(dp[i-1],nums[i]) ,直接判断之前的dp[i-1]是不是大于0也可以.第三步:确定递推顺序,从前到后 ,dp[i]由dp[i-1]推出,所以是从前到后第四步:初始化,dp[0]=nums[0], 因为dp数组表示以nums[i]结尾的最大连续和第五步:手动计算,同时输出日志来记录对照.#in...

2022-01-07 14:47:54 592

原创 股票的最大利润

前言:今天和女朋友分手了,十分emmmm怎么说呢,百感交集,剩下的还是些许的祝福,祝前途似海,再见时,依旧少年!目录思路一思路二----动态规划题目描述注意本题的只可以交易一次的这个条件思路一贪心算法:每一次记录到当前[0,i]之间的最小值,然后用当前prices[i]-min_price,迭代记录即可.class Solution {public: int maxProfit(vector<int>& prices)..

2022-01-06 16:00:40 236

原创 Linux基础之脚本文件

运行脚本: ./脚本名脚本的执行是因为Linux内置的三种语言的解释器.Shell脚本shell脚本是Linux自带的脚本:注意使用'./'来解释路径要点与细节

2022-01-05 13:59:21 2212

原创 Linux文件相关操作

文件权限考虑以下几个方面:1.文件的主人:owner2.文件是否是可读的:Read3.文件是否是可写的:Write4.是否是可执行的:X execute第一个字符为'd'表示dirctory,'l'表示链接,'-'表示文件自己|同组|他人 ---三个一组三个一组的看待r w x rwx rwxchmod o+w simple.txt ---修改权限chmod 修...

2022-01-05 11:31:04 592

原创 Linux用户相关知识

用户操作1.添加用户sudo useradd -m test1 --sudo表示以管理员身份运行其中,-m参数表示在/home下添加用户目录test1 sudo表示switch user do2.修改用户密码(终端输入密码时不显示)sudo passwd test13.删除用户 sudo userdel test1但是删除用户并没有删除/home/test1目录,也就是说我们需要额外的操作sudu rm -rf /home/test1细节:第一次创建的用户是特殊用户,称之为sud

2022-01-04 20:58:48 412

原创 Linux常用命令

学习常用命令的必要性:因为在工作中是不会给你一个图形化界面的,所以我们需要掌握常见命令用法.ls:列出目录下的所有项,list+某一个目录,访问规定目录下的内容ls -l /home/用户名/ 查看规定目录的详细内容(我也不知道为何就是'-l'...).技巧():按住tab可以自动补全按住↑,↓可以翻阅历史资料宿主机和虚拟机之间可以拷贝文件(相当于自己往自己电脑上拷贝文件)'~'代表当前目录下面的,cd ~ 表示回到当前用户主目录下面cd +当前目录下的文件或...

2022-01-04 20:16:01 549

原创 和为s的两个数字

一.题目描述二.思路一如果该数组不是排好顺序的,我们可以考虑使用hash表存储vector中的值,第二次遍历时直接就可以find(target-nums[i])?=map.end()class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> map; for (a.

2022-01-04 17:04:58 437

原创 删除排序链表中的重复元素

题目描述思路一我们使用vector<int>的数据结构来存储链表节点,如果当前节点的元素和前一个节点的元素相同,就将该vector[i]和vector[i-1]标记为-101,再次遍历时,移动链表节点cur的同时对vector的遍历指针i做自增操作,如果是标记为,则进行改变pre->next思路二当下一个节点的值等于下下一个节点的值时,我们跳过下一个节点,当前节点的next指针直接指向下下一个节点,但是这也导致一个问题:比如1,2,2,,2,3,4,5这样的序列,我们.

2022-01-03 20:36:36 677

原创 链表中倒数第K个节点

题目描述思路一很明显的一个想法就是一遍遍历链表,记录链表长度n,第二次循环n-k次,就到了我们想要的节电处这个思路很简单,不值得深究.思路二这是我想着重记录的,"倒数"先关的题目,一般的优化思路都是快慢指针,因为快指针先移动K次,慢指针从头开始移动,快指针每一次都比慢指针快K格子,所以当快指针移动到指针末尾时,慢指针也就在倒数第K个位置了.AC代码如下:class Solution {public: ListNode* getKthFromEnd(ListNod..

2022-01-03 15:37:06 402

空空如也

空空如也

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

TA关注的人

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