自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 floyd-习题(leetcode-743)

class Solution {public: int networkDelayTime(vector<vector<int>>& times, int n, int k) { //第一位维度就是:一个数组 //第二位:表明首,末点和权重 //初始化每一个点 vector<vector<int>> graph(n+1,vector<int>(n+1,1e9));.

2021-05-10 17:56:15 186

原创 floyd算法

floyd算法好像是图论算法里面最简单的一个算法(好写又好理解),应该没有之一了,floyd算法解决的是多源最短路的问题,模板是最最最最最最简单的。原理上就是动态规划。动态规划不要从局部上去进行分析。先搞清楚问题的本质,我们在一个多源的图中。现在的要求是:从i到j中途不经过索引比k大的点的最短路径。那么可以写成f[k,i,j].但是我们可以去进行状态转移。大白话就是:从i点进行出发,讲过1-k这些点,然后最终到达j的最短距离。分析如下:从i—>j,存在两种选择:直接从i到j;从i经过若干个

2021-05-10 16:02:57 443

原创 topsort习题1

无语了,调了一下午,结果边没开多。还是套模板,但是边权需要多开一点点,他有别于模板,模板是点对点之间的边权,边不会那么多,但是这里一样。用邻接表去构建的时候,会产生一对多的情况#include <iostream>#include <cstring>#include <algorithm>#include <queue>using namespace std;//接下来 n 行,第 i 行描述第 i 个人的孩子;//每行最后是 0 表示描述.

2021-05-08 17:49:27 146

原创 Topsort-稍微讲讲

拓扑排序:首先拓扑排序适用于aov网,就是有向无环图。这里插入一下链接:比较容易去进行理解。top排序的图形讲解结合王道的内容讲解去解释一下拓扑排序的条件:(1)每个顶点出现且仅仅出现一次(2)若顶点A在序列中,排在顶点B的前面,则在图中不存在从顶点B到顶点A的路径算法流程:统计所有节点的入度,对于入度如果为0的点分离出来。如果最后不存在入度为0的节点,那就说明有环,不存在拓扑排序,也就是很多题目的无解的情况。算法流程:用队列来执行 ,初始化讲所有入度为0的顶点入队。主要由以下两步循

2021-05-08 16:15:10 229

原创 leetcode-509. 斐波那契数

脑残题:不讲了。我觉得力扣的官方是希望我们去使用动态规划去进行解决。但是我偏不class Solution {public: int fib(int n) { if(n==0) return 0; else if(n==1) return 1; else return fib(n-1)+fib(n-2); }};...

2021-01-04 11:23:18 81

原创 配置事务注解出现错误以及总结

说一下做什么出现的问题:在学习spirng框架的时候,我们去配置注解,然后进行事务的管理。首先是要创建对象:事务管理器。然后在我们的业务方法中进行使用。在未修改前,我在spirng.xml中,通过aop的形式写了这个bean但是这是错误的。错误的原因是:你的事务管理对象放在bean标签内,所以出现了错误,如果此时修改陈如下的情况,错误就可以去进行避免了。顺便提及:其实写事务,还是比较死板的:spring使用事务的步骤如下:使用@Transactional的步骤:1.声明事务管理器对象.

2021-01-03 16:30:38 265

原创 leetcode-135. 分发糖果

题目的描述很简单,但是模拟的过程显得比较麻烦。现在就是分两次扫描。其实扫描的本质上是一样的。从后面比前面的评分高,那么直接糖果+1.class Solution {public: int candy(vector<int>& ratings) { //其实就是发糖果 //描述一下就是: //如果后面的人,评分更高,那么糖果+1 //如果后面的人,评分更低,那么糖果不变 //就是一个模拟的过程.

2020-12-24 13:50:35 65

原创 leetcode-387. 字符串中的第一个唯一字符

2020,12.23的每日一题,早上来直接秒了。没思路,直接代码,写不出来,就找根绳子吧。class Solution {public: int f[26]; int firstUniqChar(string s) { for(int i=0;i<s.size();i++) f[s[i]-'a']++; for(int j=0;j<s.size();j++){ if(f[s[j]-'a']==1) return j;.

2020-12-23 08:58:29 59

原创 spring(1)

其实一直都觉得,写java是没什么技术含量的事情,之前忙完了pat,其实考的很差。但是有了一点点算法水平再去学这个会稍微简单很多。这里稍微去多少插嘴一点点,《spring实战》并不是仅仅讲spring的,而是讲了spring一系列的东西。所以并不是特别推荐去直接上手spring实战, 等上完了全家桶之后的理解会更多了吧。spring全家桶:spring , springmvc ,spring boot , spring cloudspring: 出现是在2002左右,解决企业开发的难度。减轻对项目模块

2020-12-21 22:54:44 124

原创 leetcode-746. 使用最小花费爬楼梯

其实这题很像是leetcode的64题,就是一个逆向的递推过程。可以不可以算是dfs呢?目标是到终点的最短路径,我们在上楼梯中,要么上两个,要么上一个。然后就开始一个递推的过程。最后要取一个最小值。因为最后一个点可能是从导数第二个台阶上来的,或者是倒数第一个台阶上来的。这也是dp问题中,关于边界的取值。要么你在dp开始的时候就要取一个边界的值,要么就在末尾取一个边界值。最后的一个点可以这么理解:假设我们计算出我一个学期的期末排名,但是最后一场考试我们全班都加上同样的分数,其实我们可以看看倒数第二场的成

2020-12-21 09:31:45 82

原创 leetcode-29. 两数相除

好像通过率比较低,因为在边界上面处理比较麻烦。特别是这个数据,一个需要去注意的数据题目的意思是:就是 不用乘除,取模这三种方式去计算出商,注意这个商保存的是的整数部分。听了讲解之后大概能明白意思。其实从本质上面来说还是使用了乘除,因为位运算替代了乘法的操作。假设我们的出书和被除数为x的y,我们计算出的结果为k。那么数学化的形式语言就为:x/y=k。但是次数并不能失去使用除法。我们间接去进行转化一下。=>x-k*y=0。但是此时还是使用到了乘法啊,这一再去进行转化,将答案k转化成二进制的形式.

2020-12-20 15:34:47 168

原创 leetcode-6. Z 字形变换

真的是一直不敢写的题目,就是空着一直都没有写,因为之前看答案觉得模拟起来很麻烦。可能是那时候我的代码能力还不太足以支持我写出细颗粒的语言吧。废话不多说,就是一个字符串的模拟。结合别的答案,自己也把写了一遍。稍微去进行一下。题目思路分析,以及代码编写:比如这一行图:其实就是划分成N真的一种序列,然后行读取的方式去进行读取。但是需要去找一点点的小规律。我们很容易发现,在同一列中,首元素和末尾元素索引的差值是n-1.那么同一行中,两个字母间隔是2*n-2。那么我们可以首先得出结论①。首末两行我们.

2020-12-18 13:22:08 61

原创 leetcode-389. 找不同

ascii码或者使用xor去做代码:class Solution {public: char findTheDifference(string s, string t) { //用ASCII码去做 // int sum=0; // for(auto i:t) sum+=i; // for(auto i:s) sum-=i; // return sum; //用xor去做 ch.

2020-12-18 10:30:03 62

原创 leetcode-714. 买卖股票的最佳时机含手续费

我之前做过好像类似的,我第一想法就是用到了散点。其实和之前的122几乎差不多但是增加手续费的操作。很多人都去使用dp去做。但是好像直接可以去使用贪心去做。就是一个贪婪的过程。每一步去的最好的。这个我用题目给的数据去进行解释:1 3 2 8 4 7每一次的费用2元在1买上来,我们可以在3去卖掉,但是此时费力不讨好。我们可以不去选择。现在再去王后面去转,发现8可以去卖掉。此时再去收取4,在7的时候去卖掉。我们去实行的策略如下:最低价买入,最高价卖出,但是如果此时(收入-fee)<=0,那么完全.

2020-12-17 12:50:15 88

原创 maven使用(1)

我是真的多不太喜欢写java相关的博客,但是最近学javaweb,包括开始使用一些项目的框架,以及构建工具,发现记录一下还是有必要的。其实在学javaweb的时候,就应该去配置maven,但是初学者还是希望不要依赖maven,因为真的是比较遍历。但是第一次还是希望熟悉一下javaweb开发的流程。其实在学完java语言之后就可以开始配置maven了,因为廖雪峰就是这么做的,因为操作的简化真的太简单了。现在说一下maven,第一部分:完成一个java项目需要做一些什么呢?1.做什么,项目的组成部分

2020-12-16 22:51:13 94

原创 leetcode-205. 同构字符串

和我前面讲的双射一模一样,再次不再去进行赘述代码如下:class Solution {public: bool isIsomorphic(string s, string t) { //好像还是双射的感觉啊 unordered_map<char,char> st,ts; if(s.size()!=t.size()) return false; for(int i=0;i<s.size();i++){ .

2020-12-16 21:50:00 58

原创 leetcode-290. 单词规律

昨晚12.10分稍微看了一下题目的意思。感觉这不太像是简单题目的。就是模拟出这个规律比较难,但是看了力扣的题解就发现。如果抽取出题目的意思就会显得比较简单,就是让你模拟出 集合论中的双射**双射的满足:**让我们去判断字符串的每一个位置是否能构成一一对应的关系。可能有一点点绕,但是你就算不知道这个知识点,你去硬模拟,到最后还是应该去实现双射这个结论。双射:既要满足单射又要满足满射。字母和单词是否一一对应,即相同字母对应相同单词,且不同字母对应不同单词。不同字母对应不同单词,等价于相同单词对应相同字母.

2020-12-16 21:47:53 80

原创 leetcode-738. 单调递增的数字

思路:向前遍历,前一项大于后一项,前一项就减1,后面所有都变成9比如332:其实就是遍历一下这个过程332329299代码如下:class Solution {public: int monotoneIncreasingDigits(int N) { string num=to_string(N); int len=num.size(); for(int i=len-1;i>=0;i--){ if(nu.

2020-12-15 20:50:03 87

原创 leetcode-49. 字母异位词分组

算是一个小模拟:主要实现思路:其实从给定的数据就可以稍微去猜测一下做法:从这个给定的数据来看,那么每一组疑惑词的前映射(可能说这个词读者不太懂),比如第一行的三个异或词,其实算是aet的不同形式。那么我们可以去哈希表去进行映射。映射方式如下:unordered_map<string,vector < string >> heap;只要我们对每一次的去便利的时候,我们先去进行排序,然后排序后的答案放到映射数组当中去就行了。到时候吧用迭代器稍微处理一下。class So.

2020-12-14 08:27:14 91

原创 leetcode0-649. Dota2 参议院

有一点点像是博弈的过程,就像是打牌。题目大意:就是给你字符串,如果顺序靠前,那么我可以限制后面的人。比如我RD,当前的第一个字符是R,那么我可以束缚后面的D。一开始可能有点模拟不出来。但是稍微看了答案之后大概明白意思:分析如下:用队列去模拟出每一个字符串出现的位置,这样也像是模拟出了字符串的顺序。如果R在D之前,那么我可以弹出D。然后我同样去在队尾加入R,表示出R的优先级稍微高一点。如果重复了多次操作,我们不妨猜想一下如果R很多,那么我们在弹出D的时候,我们的R还是插入了队列的尾端。这更像..

2020-12-11 10:27:31 87

原创 leetcode-860. 柠檬水找零

直接看代码,我感觉更是一种策略:如果收到了5元的直接添加票子如果收到了10元的,那么10元的数量++,但是5元被找出了如果收到了20,那么可能是两种策略,可能是少了三张5元,或者少了一张10元,或者5元.但是判断20元的时候,不能通过里面的数组的值得,可以通过10元票面的数量去判断。class Solution {public: bool lemonadeChange(vector<int>& bills) { // 算是一个计算的过程 ..

2020-12-10 13:00:28 47

原创 leetcode-62. 不同路径

两种方式去解决。动态规划:表示是从(0,0)—>(m,n)的路径的条数。先时候递推的思路往上面去想象,如果当前点已经在终点了。那么可能从上边或者左边来的。那么一直往前面去递推,那么到最后递推到起点,那么就是i1||j1是,那么就是边界情况了。那么获得的关系式如下:代码如下:class Solution {public://动态规划,记录出总的目标。//从当前节点总代(0,0)--->(m,n) int uniquePaths(int m, int n) { ..

2020-12-09 22:53:12 92

原创 详谈java注解

牵肠挂肚的算法考试也考完了,现在也要好好学java了。好像se部分的内容好像还是不是那么熟悉,好像后面学spring框架的时候需要经常用到注解,所以今天抽空写一下注解的知识点。这里参考的内容有:廖雪锋的java教程,尚硅谷的java基础。什么是注解(Annotation)?注解是放在Java源码的类、方法、字段、参数前的一种特殊“注释”。注释会被编译器直接忽略,注解则可以被编译器打包进入class文件,因此,注解是一种用作标注的“元数据”。①:jdk5.0 新增的功能如果框架中没有注解的话,那么就

2020-12-06 22:41:11 120

原创 剑指 Offer 58 - II. 左旋转字符串

我也不知道说啥,有手就行class Solution {public: string reverseLeftWords(string s, int n) { string res=""; if(!s.size()) return res; else{ string tmp=s.substr(0,n); for(int i=n;i<s.size();i++) res+=s[i]; .

2020-12-04 15:59:50 65

原创 leetcode-54. 螺旋矩阵

看了我的螺旋矩阵的题目,直接一刀秒蛇形/螺旋矩阵的题目先贴上相关的题目:大家可以都去写一下题目来源题目链接pat1105 Spiral Matrix (25分)leetcode59. 螺旋矩阵 IIleetcode54. 螺旋矩阵代码如下:class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) {

2020-12-04 15:38:47 41

原创 pat-59. 螺旋矩阵 II

如何解决呢?用偏移量法:可能理解上有点小麻烦。力扣上面虽然很多关于题解的,但是我感觉边界性太强了。我不太推荐。怎么使用偏移量法呢?设置方向,螺旋数组是一个顺序的方向。我们定义一个偏移量,attention:这个和dfs的那么迷宫不太一样。顺序访问:右下左上。int dx[]={0,1,0,-1},dy[]={1,0,-1,0}.class Solution {public: vector<vector<int>> generateMatrix(int n) { .

2020-12-04 15:33:28 47

原创 pat-1105 Spiral Matrix (25分)

这次一次性把螺旋数组,蛇形数组给一锅端。简单的鸭皮啊。其实之前还是很恐惧螺旋数组的。先解决pat的题目如何解决呢?用偏移量法:可能理解上有点小麻烦。力扣上面虽然很多关于题解的,但是我感觉边界性太强了。我不太推荐。怎么使用偏移量法呢?设置方向,螺旋数组是一个顺序的方向。我们定义一个偏移量,attention:这个和dfs的那么迷宫不太一样。顺序访问:右下左上。int dx[]={0,1,0,-1},dy[]={1,0,-1,0}.先贴上代码:#include <bits/stdc++.h&

2020-12-04 15:29:30 64

原创 pat-1119 Pre- and Post-order Traversals (30分)

刚好这一题让我的树的理解更加深刻。题目的意思是如果给你先序序列和后序序列是否能够构建出唯一一棵树,如果不能请输出序号最小的,如果可以,那么请输出唯一的那一棵树的中序序列。我们不妨把题目的所以的样子的树给画出来。画出来的结果可能是存在一下两种情况。所以这个树不唯一。我们在其中找出规律,其实里面是存在规律的。这个题目最不好的地方是,判定为no的数字序列给的数据很小,可能找规律好像不太好找。关于的树的先序,中序和后序遍历顺序相信写pat的人应该很熟悉。先序序列的第一个数的为根节点(左子树和右子树.

2020-12-03 20:06:35 83

原创 pat-1107 Social Clusters (30分)

大概的意思是统计出集群中点的,以及每一个集群的人数:算法设计:(1)开一个hob数组,数组的下标表示的是爱好的编号。而每一个编号存储的是:喜欢这个爱好的人的编号。(2)然后对每一个小的编号集合里面的人进行种群合并就行了。需要输出种群的数量,以及按照要求从小到大输出种群对应的人数。关于提两点,一个是并查集的初始化,另外是并查集的合并(这里直接给出已经经过路径压缩的并查集合并的板子)**并查集合并如下:**不要问这么多并查集的板子这么写,力扣上面都是这样,相对于晴神的算法比较,我更喜欢这种方式.

2020-12-02 22:47:08 46

原创 pat-1143 Lowest Common Ancestor (30分)

一个比较优秀的LCA的解题方法,虽然在复杂度上面可能会有一点点高。看到在解题目上面真的很巧妙。性质用得非常完美。这里我贴上一个关于LCA的专题::LCA专题LCA我所了解的解法,倍增,tarjan等等…但是我还没学过那些算法,所以暂时不写了解题思路:对于题目的要求,我就将题目的前序BST序列先去进行转化(其实更多的是用到了bst的性质去做的):转化后的树的结构是这样的:我们不断去查询,输入u和v。那么存在如下情况,因为bst的性质,左<中<=右。那么显然存在如下表示:(u<.

2020-12-02 22:36:38 61

原创 pat-1154 Vertex Coloring (25分)

题目大意:就是先去构建一个图,然后给你一系列顶点。现在判断的是:一条边的两个顶点的颜色是不是不同。如果不同,那么表示的是k着色,且输出元素种类的个数。如果不存在相同输出No。这里推荐使用邻接表,或者结构体直接去存储。因为10000条边,还要复杂度可能在1亿了,而时间给了0.9秒,可能会超时。#include <bits/stdc++.h>using namespace std;int n,m,k;const int N=10010;bool st[N];struct edge{.

2020-12-01 12:02:04 82

原创 pat-1069 The Black Hole of Numbers (20分)

感觉我的解答比很多题解都好,嘻嘻就是模板的使用但是需要去做注意一个测试点,如果输出的数字是一个小于1000的数,就是数位小于4,那么就需要自己去使用string的匿名函数去补上前导0代码如下:#include <iostream>#include <string.h>#include <algorithm>using namespace std;int main(){ string str,tmp;cin>>str; while(1){ .

2020-11-26 12:54:23 2994

原创 杂谈-删除数组元素的,以及哈希白的遍历

如何取出vector中最后一个元素, (1)用erase函数,但是复杂度比较好,容易超时。注意一定要-1。不然超过的数组的范围 代码:res.erase(res.end()-1); (2) 通过pop_back()函数,而且直接去移出元素的时间复杂度是最低的 代码: res.pop_back(); 注意的返回值是void直接去pop_back()即可关于哈希表的遍历:(1)直接通过键去遍历,直接通过键映射到哈希表里面去,然后获取键对应的值(2)for(auto [k,v]:用户所设置的

2020-11-22 22:41:52 67

原创 leetcode-553. 最优除法

小模拟:说几个在做题目中的一个小要点:(1):分类讨论,注意边界,需要转化成string类型,用to_string()函数(2):注意一个可能多了一个 /。(3):如何取出vector中最后一个元素, (1)用erase函数,但是复杂度比较好,容易超时。注意一定要-1。不然超过的数组的范围 代码:res.erase(res.end()-1); (2) 通过pop_back()函数,而且直接去移出元素的时间复杂度是最低的 代码: res.pop_back(); 注意的返回值是void直接.

2020-11-22 22:27:25 327

原创 pat-554. 砖墙

解释:我们找出每一道的空袭,比如在上面我们可切出如下的空袭,然后我们记录在哈希表上面去。然后我们选取出点最多的那个空隙,选出他的对里面,然后就是刀刃碰到最小的次数代码如下:在保存坐标的时候,从起始点开始然后保存每个空袭的长度,然后依次往后面去进行相加,此放入和哈希表里面去。可能我说其实还是很乱很乱我做出一个解释,将上面的砖块做出一个投影,投影在x轴上面:(1,0)(3,0)(5,0)(3,0)(4,0)(1,0)(4,0)(2,0)(3,0)(4,0)(1,0)(4,0)(5,0)..

2020-11-22 21:58:23 318

原创 leetcode-559 N叉树的最大深度

二叉树的最大深度上面去进行一下转化,稍微去注意下,N叉树的孩子保存一个vector里面,对vector里面的元素去进行遍历即可。最后返回的高度一定要+1/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val.

2020-11-22 21:17:08 75

原创 leetcode-有效的字母异位词

最笨的办法了:class Solution {public: bool isAnagram(string s, string t) { //排序后去进行比较 sort(s.begin(),s.end()); sort(t.begin(),t.end()); if(s==t) return true; else return false; }};...

2020-11-22 21:10:29 45

原创 leetcode-和为K的子数组

前缀和+哈希表。其实最终的部分是前缀和代码如下:class Solution {public: //前缀和+哈希 int subarraySum(vector<int>& nums, int k) { int n=nums.size(); vector<int> s(n+1); for(int i=1;i<=n;i++) s[i]=s[i-1]+nums[i-1]; unordere.

2020-11-22 21:08:38 65

原创 pat-1003 Emergency (25分)

模板题目:第二标尺需要去注意#include <iostream>#include <algorithm>#include <string.h>using namespace std;const int N=510;const int INF=1000000000;int n,m,st,ed,g[N][N],weight[N];//点权int d[N];//记录距离int w[N];//路径的最大的点权和int num[N];//记录最短路径的条数.

2020-11-20 22:26:20 53

原创 pat-1030 Travel Plan (30分)

#include <bits/stdc++.h>using namespace std;const int N=510;const int INF=1000000000;int g[N][N],c[N][N],d[N],co[N];//注意c是边权 int pre[N];//保存一个前驱节点,到时候递归去进行遍历 int n,m,st,ed;//城市数,主干道数目,起始城市,终点城市 bool vis[N];void dijkstra(int s){ fill(d,d+N,I.

2020-11-20 22:14:38 65

空空如也

空空如也

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

TA关注的人

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