算法刷题库
文章平均质量分 60
练习
星空皓月
工欲善其事,必先利其器。
展开
-
Leetcode面试经典150题
经典面试题150原创 2024-03-14 22:15:58 · 1397 阅读 · 0 评论 -
2022年蓝桥杯真题-积木画【最简单的矩阵快速幂】
同时, 小明有一块面积大小为 2×N 的画布, 画布由 2×N 个1×1 区域构成。小明需要用以上两种积木将画布拼满, 他想知道总共有多少种不同的方式?积木可以任意旋转, 且画布的方向固定。输出一个整数表示答案。由于答案可能很大,所以输出其对 1000000007 取模后的值。输入一个整数 N,表示画布大小。原创 2023-03-29 09:12:20 · 299 阅读 · 1 评论 -
蓝桥杯 算法训练 Python
【代码】备战蓝桥杯 算法训练题型 Python。原创 2023-03-13 10:06:09 · 1508 阅读 · 3 评论 -
LeetCode:每日一题【第八周】
力口每日一题原创 2022-09-19 16:52:56 · 214 阅读 · 0 评论 -
LeetCode:每日一题【第七周】
力口每日一题原创 2022-09-12 11:30:23 · 893 阅读 · 0 评论 -
LeetCode:每日一题【第六周】
力扣每日一题原创 2022-09-05 14:11:02 · 192 阅读 · 0 评论 -
LeetCode:每日一题【第五周】
力口每日一题原创 2022-08-29 08:14:59 · 1056 阅读 · 0 评论 -
LeetCode:每日一题【第四周】
8.22 ~ 8.28 尽量坚持刷力扣的每日一题,锻炼大脑思维。更新中~~原创 2022-08-22 15:13:47 · 172 阅读 · 0 评论 -
LeetCode:每日一题【第三周】
8.15 ~ 8.21 尽量坚持刷力扣的每日一题,锻炼大脑思维。更新中~~原创 2022-08-15 10:19:42 · 1214 阅读 · 0 评论 -
LeetCode:每日一题【第二周】
8.8 ~ 8.14 尽量坚持刷力扣的每日一题,锻炼大脑思维。更新中~~原创 2022-08-08 11:34:28 · 188 阅读 · 0 评论 -
LeetCode:每日一题【第一周】
8.1 ~ 8.7 尽量坚持刷力扣的每日一题,锻炼大脑思维。更新中~~原创 2022-08-06 16:06:11 · 611 阅读 · 0 评论 -
LeetCode:814. 二叉树剪枝【递归】
给你二叉树的根结点root,此外树的每个结点的值要么是0,要么是1。返回移除了所有不包含1的子树的原二叉树。节点node的子树为node本身加上所有node的后代。原创 2022-07-21 17:22:36 · 345 阅读 · 0 评论 -
Leetcode:905. 按奇偶排序数组【双指针+三种语言实现】
题目描述给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。返回满足此条件的 任一数组 作为答案。输入与输出输入:nums = [3,1,2,4]输出:[2,4,3,1]解释:[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3] 也会被视作正确答案。提示1 <= nums.length <= 50000 <= nums[i] <= 5000思路利用双指针实现,类似于快速排序思想,从左边扫直到遇到奇数为原创 2022-04-28 16:19:24 · 566 阅读 · 0 评论 -
Leetcode:20. 有效的括号【三种思路+不同语言实现】
题目描述给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。输入和输出输入:s = “()”输出:true输入:s = “()[]{}”输出:true输入:s = “([)]”输出:false提示1 <= s.length <= 10e4s 仅由括号 ‘()[]{}’ 组成思路1利用栈的思想,之后判断每个括号是否满足条原创 2022-04-25 18:18:35 · 512 阅读 · 0 评论 -
Leetcode:14. 最长公共前缀【思维+排序】
题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。输入和输出输入:strs = [“flower”,“flow”,“flight”]输出:“fl”输入:strs = [“dog”,“racecar”,“car”]输出:“”解释:输入不存在公共前缀。提示1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英文字母组成思路如果我们可以将原创 2022-04-25 00:46:38 · 123 阅读 · 0 评论 -
Leetcode:13.罗马数字转整数【键值对映射】
题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + I原创 2022-04-24 23:44:32 · 139 阅读 · 0 评论 -
CF - 658 -- B.Sequential Nim【简单博弈论】
Sequential Nim题意:顺序给出n堆石头,有两名玩家(First and Second) 首先是First先拿第一堆石头,它可以拿至少一个,如果谁不能拿了,则另一方获胜。思路:简单博弈论:分析子问题 2 3 1,这肯定是第一个拿第一堆的人(First)获胜,再来分析 5 2 2 2,根据前面分析的2 3 1,2 2 2 同理也是当前先拿的人获胜,所以第一个拿第一堆的人可以计划他也是第一个拿第二堆的人,那么它可以先拿到第一堆石头的a[1]-1个,这样他也是第一个拿第二堆的,由此分析,谁先原创 2020-07-23 09:25:46 · 395 阅读 · 0 评论 -
CF - 485C -- Bits【| 或运算】
Bits题意给一个区间,然后找出这个区间里面的二进制数含有1最多的数并且这个数最小。思路求二进制1的个数最多,那么我们想到就是位运算符|来判断二进制位是否是1即可。从区间最小值的二进制最低位开始或(|)1,依次操作,从低位到高位| 1,直到大于r结束。AC代码#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;t原创 2020-07-19 12:08:01 · 195 阅读 · 0 评论 -
CF - 1385E -- Directing Edges【拓扑排序】
Directing Edges题意:给n个点,m条边,每次输入m个关系, 每行有t,x,y。如果t是0则表示x到y是无向边,t等于1则表示x到y是有向边,问,如果图有环,输出No,否则输出Yes,并且输出任意有向图。思路: 利用拓扑排序检查是否有环。题中告诉没有重复的路径,那么我们在存图时, 将所有边都存一遍,有向边特殊存。我们利用拓扑排序时,存一下每个结点 出来的先后顺序。在对已有的边进行输出的时候。判断先后输出即可。 AC代码#include<iostream>#原创 2020-07-18 12:37:29 · 254 阅读 · 0 评论 -
CF - 1385D -- a-Good String【分治】
a-Good String题意: 已知一个字符串,问至少需要改变多少个字符,才能使得该字符串成为'a-Good String',s串。 s串的定义如下。 s的长度为1,由字符c组成(即s1 = c); s的长度大于1,字符串的前半部分仅由字符c组成(即s1 = s2 = ... = sn/2 = c), 而字符串的后半部分(即字符串sn/2+1 = sn/2+2 = ... = sn)是(c + 1)良好的字符串; s的长度大于1,字符串的后半部分仅由字符c组成(即s1 = s2 = .原创 2020-07-18 12:32:58 · 564 阅读 · 0 评论 -
HDU - 1873 -- 看病要排队【优先队列数组+pair】
看病要排队Description看病要排队这个是地球人都知道的常识。不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来先服务的原则。所以医院对每种病情规定了10种不同的优先级。级别为10的优先权最高,级别为1的优先权最低。医生在看病时,则会在他的队伍里面选择一个优先权最高的人进行诊治。如果遇到两个优先权一样的病人的话,则选择最早来排队的病人。现在就请你帮助医院模拟这个看病过程。Input输原创 2020-07-16 16:03:07 · 273 阅读 · 0 评论 -
POJ - 1007 -- DNA Sorting【排序+逆序对】
DNA SortingDescriptionOne measure of “unsortedness’’ in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence ”DAABEC’’, this measure is 5, since D is greater than four letters原创 2020-07-13 19:37:36 · 594 阅读 · 0 评论 -
HDU - 1263 -- 水果【排序升级版,map VS pair自带优先级】
水果Description夏天来了~~ 好开心啊,呵呵,好多好多水果 ~~Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了.Input第一行正整数N(0<N<=10)表示有N组测试数据.每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字母组成,长度原创 2020-07-13 19:25:40 · 144 阅读 · 0 评论 -
hihoCoder 1819 --- 栈的加强版【栈+延迟更新】
栈的加强版Description请你实现一个加强版的栈,支持以下操作:push x: 向栈顶加入一个整数xpop: 从栈顶弹出一个整数,并且输出该整数inc k x: 将处于栈底的前k个整数加x。Input第一行包含一个整数N,代表操作的数量。以下N行每行一条操作。1 ≤ N ≤ 200000, 0 ≤ x ≤ 100000, 1 ≤ k ≤ 当前栈的大小Output对于每一个pop操作,输出弹出的整数数值。Sample Input6push 1inc 1 2push 2.原创 2020-06-27 21:56:26 · 233 阅读 · 0 评论 -
计蒜客 T2059 --- 细胞分裂【质因数分解】
细胞分裂DescriptionHanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家。现在,他正在为一个细胞实验做准备工作:培养细胞样本。Hanks 博士手里现在有 N 种细胞,编号从 1−N,一个第 i 种细胞经过 1 秒钟可以分裂为 Si 个同种细胞( Si 为正整数)。现在他需要选取某种细胞的一个放进培养皿,让其自由分裂,进行培养。一段时间以后,再把培养皿中的所有细胞平均分入 M个试管,形成 M 份样本,用于实验。Hanks 博士的试管数 M 很大,普通的计算机的基本数据类型无原创 2020-06-27 21:43:58 · 235 阅读 · 0 评论 -
HihoCoder 1475 --- 数组分拆【dp+map】
数组分拆Description小Ho得到了一个数组作为他的新年礼物,他非常喜欢这个数组!在仔细研究了几天之后,小Ho成功的将这个数组拆成了若干段,并且每段的和都不为0!现在小Ho希望知道,这样的拆分方法一共有多少种?两种拆分方法被视作不同,当且仅当数组断开的所有位置组成的集合不同。Input每组输入的第一行为一个正整数N,表示这个数组的长度第二行为N个整数A1~AN,描述小Ho收到的这个数组对于40%的数据,满足1<=N<=10对于100%的数据,满足1<=N<=原创 2020-06-27 21:33:32 · 213 阅读 · 0 评论 -
HihoCoder 1435 --- Circle Detect【拓扑排序】
Circle DetectDescriptionYou are given a directed graph G which has N nodes and M directed edges. Your task is to detect whether it contains any circle.InputThe first line contains an integer T denoting the number of test cases. (1 <= T <= 5)For原创 2020-06-27 21:20:16 · 130 阅读 · 0 评论 -
HihoCoder 1410 --- Powers of Two【二进制拆分+递归】
Powers of TwoDescriptionGiven a positive integer N, it is possible to represent N as the sum of several positive or negative powers of 2 (± 2k for some k). For example 7 can be represented as 22 + 21 + 20 and 23 + (-20).Your task is to find the represe.原创 2020-06-27 21:09:00 · 205 阅读 · 0 评论 -
HihoCoder 1501 --- 风格不统一如何写程序
风格不统一如何写程序Description小Hi写程序时习惯用蛇形命名法(snake case)为变量起名字,即用下划线将单词连接起来,例如:file_name、 line_number。小Ho写程序时习惯用驼峰命名法(camel case)为变量起名字,即第一个单词首字母小写,后面单词首字母大写,例如:fileName、lineNumber。为了风格统一,他们决定邀请公正的第三方来编写一个转换程序,可以把一种命名法的变量名转换为另一种命名法的变量名。你能帮助他们解决这一难题吗?Input第一原创 2020-06-27 20:59:28 · 134 阅读 · 0 评论 -
计蒜客 A1594 --- 封印之门(最短路Floyd和dijkstra)
封印之门思路(dijkstra)修改字符(x–>y)就等同于x能到y,那么我们只需要将原串的每个字符到目标串的每个字母走个最短路dijkstra即可,时间复杂度为O(2626len),len代表目标串的长度。代码#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<map>#include<queue>#includ原创 2020-06-15 00:33:41 · 455 阅读 · 0 评论 -
CodeForces 859C --- Pie Rules(逆向dp)
Pie Rules思路起始决定权是在Bob身上,而我们正向不好推导最优情况,如果逆向推导最后决定权在于Bob,也就是dp1,过程中不需要考虑是谁拿的,而是考虑拿与不拿。如果不拿,则是dp[i+1],如果拿,则是sum[i+1]-dp[i+1]+arr[i]。AC代码#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<map>#in原创 2020-06-15 00:26:20 · 285 阅读 · 0 评论 -
HDU 1253 --- 胜利大逃亡(bfs)
胜利大逃亡思路bfs三维地图,走一遍即可。代码#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<map>#include<queue>#include<string>#include<vector>#include<utility>#include<algorithm&g原创 2020-06-15 00:22:22 · 180 阅读 · 0 评论 -
计蒜客 A1139 ----引爆炸弹 【并查集 or dfs】
引爆炸弹思路1 :dfsdfs,先点爆炸弹,然后把该炸弹行和列标记了,继续枚举改行的其他炸弹(引爆),一直dfs下去(一直引爆),直到不能引爆。引爆的炸弹和点爆的炸弹都变为0,dfs的次数就是点爆的次数。时间复杂度为O(n*m)代码#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<map>#include<queue>原创 2020-06-15 00:15:39 · 251 阅读 · 0 评论 -
HDU 1698 --- Just a Hook:线段树(区间更新)
Just a Hook思路线段树区间修改。代码#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<map>#include<queue>#include<string>#include<vector>#include<utility>#include<algorithm&g原创 2020-06-15 00:04:34 · 123 阅读 · 0 评论 -
HDU 3068 --- 最长回文:马拉车算法
最长回文串思路回文串模板题代码#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<map>#include<queue>#include<string>#include<vector>#include<utility>#include<algorithm>usin原创 2020-06-14 23:58:12 · 121 阅读 · 0 评论 -
计蒜客 A1633 --- 蒜头君的数轴(gcd)
思路:数论知识,我们要求完美的数轴(间距为只有一个不同),怎样确定哪个作为不同的间距是本题的突破口1.首先忽略这个不同间距,我们怎样找需要插入多少个点呢,只需找到剩下间距的最大公约数,这个最大公约数就是相同的间距,那么我们用这些间距的总距离除以这个最大公约数再减去已有的点(n-2),就是需要插入的点。2.设这个不同的间距为i,我们对这个分界点前面的间距求gcd,后面的间距 求gcd,最后两个的再求个gcd。例如(间距为 4 8 3 8 16)3.枚举每个分界点,找出来最小插入点数即可。代码.原创 2020-06-14 23:44:04 · 181 阅读 · 0 评论 -
Codeforces Round #648 (Div. 2):A~D
A. Matrix Game题意Ashish and Vivek 玩游戏,在[n,m]矩形中的0位置填写1;满足,当前的x行和y列没有1的位置可填。最先是Ashish填,如果谁不能填了,则另一方获胜。思路直接模拟即可。代码#include<bits/stdc++.h>using namespace std;const int MAXN=55;int arr[MAXN][MAXN],cnt=0;bool x[MAXN],y[MAXN];inline int read(){原创 2020-06-08 12:57:35 · 236 阅读 · 0 评论 -
AtCoder Beginner Contest 169:BCD
B - Multiplication 2题意给n个数(0<=ai<=1e18),求n个数的乘积,如果超过1e18则输出-1思路这个题考的是对数据类型溢出的处理。我们知道数据类型的范围是一个循环,0到最大值,超过最大值,变为最小值,然后最小值到0.如果这个题是考和的话,我们就可以利用这一点,来判断是否溢出。但是考的是积,则需要特殊去处理。1.判断是否有0的值,如果有,乘积为02.前一个乘积的大小为ans,当前为temp,我们需要判断ans*temp>INF则去判断INF/t原创 2020-06-01 23:40:55 · 209 阅读 · 0 评论 -
Codeforces--C. Celex Update
题意将n*m的方格以上面的规则,给每个方格上数字,然后给定两个点,让左上角的A点走方格到右下角的B点(规定了B点的xy大于A点),让A点只能往右或者往下走。统计A点走过方格的和sum,问这个sum有多少个不同值?思路这个题用搜索是行不通的,只能找规律。先上一个图观察最小的那个值,肯定是先往右,再往下,让这个最小的值作为最开始的中转点,让其余没有的格子每次都由上一条路径向左下折叠(认为每次路径都+1),将会把其余格子全部使用完。这样总的路径就是两个点之间全部的格子减去最小值的那个路径的格子+1..原创 2020-05-27 13:18:33 · 176 阅读 · 0 评论 -
Codeforces--A. Park Lighting
题意给定两个整数n和m,使其形成n* m的方格,每个方格都有分界线和边界线。现在题目给定,一个灯笼在分解线处可以照亮两个相邻的方格,边界线处可照亮这个方格,问n *m的方格至少需要多少个灯笼照亮全部的方格思路直接模拟即可,判断n*m有奇数个方格,还是偶数个方格,如果是偶数个,则直接除以2即可,如果是奇数个,则必定有一个方格是由边界线点亮的。AC代码#include<bits\stdc++.h>using namespace std;int main(){ int n; sca.原创 2020-05-27 12:30:30 · 146 阅读 · 0 评论