自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 DFS【Acwing】

【DFS】1. 排列数字 2. n-皇后

2022-07-04 10:49:35 198 1

原创 【力扣】最小基因变化

题目链接:https://leetcode-cn.com/problems/minimum-genetic-mutation/// start-end 每一次有效的基因变化后的基因序列 都是start->end的一个状态//最短编辑距离的问题 抽象为边权为1的图上的最短路问题 使用BFS求解//bank中的状态可以看作是图上的节点,因为需要保证 每次变化后的状态都在bank中//两个状态如果只相差一个字符,说明这两个节点是相邻的//从start出发,BFS逐层遍历图上的每一个节点,为了方

2022-05-07 22:56:29 172

原创 Git笔记(一)

首先 先说明 文章只是做一个记录,还在学习中,欢迎大佬留言提供新的解决方法,以及解答文章中提出的一些疑问。先整体介绍一下项目的开发:不同组员负责不同的微服务开发,不同的微服务要新创建一个单独的分支进行开发,例如new_function/user分支整个项目包含master分支、test测试分支、以及各个微服务对应的分支。每个人应该怎么做呢?每个组员先将test分支克隆到本地,然后从test分支出发创建新的分支,切记,一定要从test分支创建新的分支并切换。如果我们从test出发创建了很.

2022-04-06 16:32:59 315

原创 取快递【球盒模型】【同球同盒】

题目描述双十一很多商品属实便宜,小明也是没控制住自己,于是这周他手机上的快递短信就爆炸了。在兴奋的同时,如何把这些快递取回来就是一件比较麻烦的事了。目前,小明有mmm个快递需要取,但是他计划至多跑nnn次就将所有的快递取回来,并且绝对不拖延的小明还要保证每次取的快递数不少于之后每次取的快递数。但是纠结的小明就在想,一共有多少种不同的取快递方式。不过为了减少纠结,他决定只考虑每次取的快递数,也就是假设所有快递都是完全相同的。输入两个正整数mmm和nnn,分别表示快递总数和计划最多几次取完快递。

2021-12-28 15:17:14 940

原创 DFS【模板】

#include<bits/stdc++.h>#include<iostream>using namespace std;vector<int> vec[1000];bool isVisited[1000];int num[1000];//计算节点数void dfs(int index){ cout<<index<<" "; //从index点开始访问 num[index]=1; for(int i=

2021-12-27 22:12:40 399

原创 确实是凉菜【类似砍木头】【二分】

题目描述乾隆白菜是北京的特色美食,它的做法是用麻酱为基调的酸甜料汁,凉拌生白菜心,做法简单,清脆爽口,确实是一道凉菜。于是,小明决定自己做一份“精品”的乾隆白菜。首先,他准备了nnn颗重量都是整数的精品白菜叶作为食材。接下来,他需要将这些白菜叶撕成至少mmm片来完成这道菜,有强迫症的小明为了让这道菜更加精品,他要求每片菜叶的重量相同,且必须也是整数。强迫症是可怕的,为了不让这道菜毁为白菜碎,小明还要保证每片白菜叶的重量尽可能大。那么请问,成菜中每片白菜的最大重量会是多少?输入第一行两个整数n

2021-12-27 10:53:59 405

原创 快速排序【分治】【随机】

#include <bits/stdc++.h>using namespace std;int arr[100010];void quicksort(int left, int right){ //递归终止条件 if(left>=right) return; //选择一个基准pivot,然后将<pivot的放到左边,将>pivot的放在右边,最后将pivot与中间相遇的交换。 //这个过程不断递归,直到区间为1,完成排

2021-12-26 16:14:56 644

原创 逆序对个数【归并排序的应用】【分治】

题目描述题目链接【逆序对个数】给定一个长度为nnn的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第iii个和第jjj个元素,如果满足i<ji<ji<j且a[i]>a[j]a[i]>a[j]a[i]>a[j],则其为一个逆序对;否则不是。输入格式第一行包含整数nnn,表示数列的长度。第二行包含nnn个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围1≤n≤1000001\leq{n}\leq{100000}1≤

2021-12-26 11:46:56 444

原创 没有上司的舞会【树形DP】

题目描述某大学有nnn个职员,编号为1...n1...n1...n。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数rir_iri​​,但是呢,如果某个职员的直接上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数。输入格式输入的第一行是一个整数nnn。第222到第n+1n+1n+1行,每行一个整数,第i+1i+1i

2021-12-25 22:33:36 1832

原创 最长公共子序列【线性DP】【二维】

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:text1 = “abcde”, text2 = “ace

2021-12-21 22:47:03 123

原创 最长回文子序列【线性DP】【二维】

Desciption:给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。示例 1:输入:s = “bbbab”输出:4解释:一个可能的最长回文子序列为 “bbbb” 。示例 2:输入:s = “cbbd”输出:2解释:一个可能的最长回文子序列为 “bb” 。提示:1 <= s.length <= 1000s仅由小写英文字母组成题目链接:https://le

2021-12-21 22:07:20 130

原创 二分查找【仅代码】【左右界】

#include <bits/stdc++.h>using namespace std;int ans[1010];//寻找左边界//如果找到target则返回最小下标,否则返回<target的最大的数的下标//寻找等于的时候收敛到的=target的最小下标//否则收敛到大于target的z最小数的下标int findLeft(int target, int left, int right){ int mid; while(left<right){

2021-12-21 14:03:16 303

原创 最长上升子序列【线性DP】【一维】【二分】

Desciption:给定一个长度为 NN 的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数 NN。第二行包含 NN 个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤1000,1\leq{N}\leq1000,1≤N≤1000,​−109≤-10^9\leq−109≤数列中的数≤109\leq{10^9}≤109​。输入样例:73 1 2 1 8 5 6输出样例:4Answer:解法一:动态规划 O(n2)O(n^2)O

2021-12-20 20:13:29 348

原创 爬楼梯问题【线性DP】【一维】【矩阵快速幂】

两个爬楼梯的题,一个2*2, 一个是3*3。Description: 爬楼梯游戏题目来源:https://www.acwing.com/problem/content/description/3683/一个楼梯共有nnn级台阶,每次可以走一级或者两级,问从第000级台阶走到第nnn级台阶一共有多少种方案。输入格式一个整数nnn。输出格式一个整数,表示方案总数。由于结果很大,因此只需输出对100000000710000000071000000007取模后的值。数据范围1≤n≤10181\l

2021-12-20 16:30:24 621

原创 数字三角形【线性DP】【二维】

Description:题目来源:https://www.acwing.com/problem/content/900/给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 44 5 2 6 5输入格式第一行包含整数 nn,表示数字三角形的层数。接下来 nn 行,每行包含

2021-12-19 23:09:02 209

原创 AcWing 1120. 埃及分数【IDA*】【迭代加深+剪枝】

Description:题目来源:https://www.acwing.com/problem/content/description/1122/Answer:使用IDA*算法。IDA*算法是基于迭代加深的A*算法,迭代加深只有在状态呈指数级增长时才有较好的效果,而A*就是为了防止状态呈指数级增长的。IDA*算法其实是同时运用迭代加深与全局最优性剪枝。如果要寻找长度最短且最小分数最大的最优方案,可以考虑搜索分数项最少的所有情况,然后找到最优解。这样得到的最优解也是全局最优解。很容易想到使

2021-12-19 19:05:03 301

原创 102. 二叉树的层序遍历【Leetcode】(BFS)

Description:给你一个二叉树,请你返回其按层序遍历到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversalAnswer:采用队列的思想。

2021-12-18 16:53:03 395

原创 72. 编辑距离(力扣)【线性DP】

Description:题目来源:https://leetcode-cn.com/problems/edit-distance/给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符Answer:我们假设f(i,j)f(i,j)f(i,j)表示前缀为iii的单词,与前缀为jjj的单词进行匹配,所需要的最少的操作数。匹配肯定是一个一个字符的进行匹配,无非就两种情况。

2021-12-17 21:54:35 408

原创 传球问题-矩阵快速幂

Description:传球问题:一共m个人,n次传球。从小明手中传出,经过n次回到小明A手里的方案数。Answer:首先,我们知道,不管是A还是B,都不能自己传给自己,也就是说不能出现AA, BB这种情况。设经过n次传球,回到小明手中的方案数为ana_nan​​。(第一种传球方式)设经过n次传球,不回到小明手中(指定回到B)的方案数为bnb_nbn​​​。(第二种传球方式)很容易知道b1=1,b2=m−2b_1=1,b_2=m-2b1​=1,b2​=m−2第一球传球方式: ​​第二种

2021-12-17 00:45:57 724

原创 熄灯问题(枚举)

题目来源:http://bailian.openjudge.cn/practice/2811/Description:有一个由按钮组成的矩阵,其中每行有6个按钮,共5行。每个按钮的位置上有一盏灯。当按下一个按钮后,该按钮以及周围位置(上边、下边、左边、右边)的灯都会改变一次。即,如果灯原来是点亮的,就会被熄灭;如果灯原来是熄灭的,则会被点亮。在矩阵角上的按钮改变3盏灯的状态;在矩阵边上的按钮改变4盏灯的状态;其他的按钮改变5盏灯的状态。用X标记的按钮表示被按下,右边的矩阵表示灯状态的改变。对矩阵中的

2021-12-11 12:50:16 1380

原创 主定理(Master Theorem)

主定理是分析分治算法时间复杂度很重要的一个定理。我们之前对于一个递归类的代码进行时间复杂度分析,一般会采用递归树的方式,下面我们先介绍一下递归树的方式,理解之后,再引入主定理的相关内容。分治的介绍分治算法总是将问题的规模不断的拆分,以归并排序为例。假设T(n)T(n)T(n)代表原问题的规模,nnn为输入数据的规模。第一次拆分后,假设拆分成两份,规模就变成了n2\frac{n}{2}2n​​,然后各自再递归调用归并排序,这部分时间复杂度为2T(n2)2T(\frac{n}{2})2T(2n​),最

2021-12-08 21:57:37 4804 1

原创 归并排序(Two Way Merge Sort)

归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而 治(conquer) 的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。整个过程就是:对左边不断划分对右边不断划分合并代码如下(含调试输出过程):#include<iostream>#include<bits/stdc++.h>using namespace std;vector&l

2021-12-08 20:43:30 290

原创 卡特兰数(Catalan Number)

卡特兰数(Catalan number) 其实来源于卡特兰解决凸n+2n+2n+2边形的剖分问题得到的数列f(n)f(n)f(n)(为了便于区分组合数,这里用f(n)f(n)f(n)表示)。卡特兰数是组合数学中常出现在各种计数问题中的数列。1,1,2,5,14,42,132...1,1,2,5,14,42,132...1,1,2,5,14,42,132...卡特兰数的性质通项公式: f(n)=C2nnn+1=C2nn−C2nn−1f(n)=\frac{C_{2n}^n}{n+1}=C_{2n}^n-C

2021-12-08 20:26:45 5842 4

原创 剑指 Offer 10- I. 斐波那契数列

Description:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项(即F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。Answer:方法一: 递归肯定超时,别想了。其实也可以结合记忆化

2021-12-07 22:39:37 307

原创 Randomized algorithms(随机算法)

随机算法是由一个雇佣问题引出的:假如你要雇佣一名新的办公室助理,但是你先前的雇佣尝试都失败了,你打算找一个雇佣代理。雇佣代理每天给你推荐一个应聘者。你面试这个人,然后决定是否雇佣他,同时你需要付给雇佣代理一定的费用,以便面试应聘者。除此之外,雇佣一个人也需要花费一大笔钱,因为你必须辞掉目前的办公室助理,同时付给雇佣代理一大笔中介费。你承诺:任何时候都找最合适的人来担任这项职务,因此你决定在面试完应聘者之后,如果该应聘者比目前的办公室助理更合适,就会辞掉当前的办公室助理,然后聘用新的。同时你愿意为该策

2021-12-06 15:37:06 1003

原创 算法导论习题5.3-4解析

Description:Professor Armstrong suggests the following procedure for generating a uniform random permutation:PERMUTE-BY-CYCLIC(A) n = A.length let B[1..n] be a new array offset = RANDOM(1, n) for i = 1 to n dest = i + offset

2021-12-05 11:31:07 420 3

空空如也

空空如也

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

TA关注的人

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