![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题
lsxkugou
这个作者很懒,什么都没留下…
展开
-
leetcode刷题数据结构
1. sort重写最大数class LargerNumKey(str): def __lt__(x, y): return x+y < y+xclass Solution: def largestNumber(self, nums: List[int]) -> str: nums = [str(i) for i in nums] nums.sort(key=LargerNumKey, reverse = True)原创 2022-01-17 03:40:37 · 171 阅读 · 0 评论 -
常用刷题模板
二分比较好理解的左侧右侧二分统一版本r是len - 1, l + 1< r作为判断条件答案可能出现在l或r为Index的数据上 所以要判断之后返回def findLeft(): nonlocal A, target l, r = 0, len(A) - 1 while l + 1 < r: mid = (l + r) // 2 if A[mid] >= target: r = mid e原创 2022-01-08 05:42:41 · 545 阅读 · 0 评论 -
并查集好题
https://leetcode-cn.com/problems/evaluate-division/原创 2021-08-15 06:04:22 · 101 阅读 · 0 评论 -
计算两个区间是否重合 以及重合长度
Meeting Scheduler一个很好的计算两个区间是否重合的方式,并可以计算重合点数据区间长度计算头的最大值, 尾的最小值即可 int ibegin = slots1[i][0], iend = slots1[i][1], jbegin = slots2[j][0], jend = slots2[j][1]; int head = max(ibegin,jbegin), tail = min(iend,jend);tail-head...原创 2021-07-26 10:09:43 · 1712 阅读 · 0 评论 -
左侧二分模板的思考
左侧二分模板:左侧二分模板返回的是小于taget的序号所以当l最后会有几种情况l < array.size() && v[l]== target 如1 2 2找 2 l = 1 意思是小于2的数有1个,因为数组从0 开始,所以正好就找到了2,但实际意义并非是2. 这种情况下,直接找到了target返回target就完事了l=0, 此时有两种情况,一是: array[0]恰好是target,此时和 1 情况重复,因此不必要再写,第二种情况:数组中没有比target小的元素原创 2021-07-17 09:27:42 · 56 阅读 · 0 评论 -
leetcode二分算法 循环数组
https://leetcode-cn.com/problems/search-in-rotated-sorted-array/好题思路:原创 2021-07-15 00:05:21 · 92 阅读 · 0 评论 -
TPM的对象
判断图中是否含有圈:无向图可以直接用并查集去判断有向图可以用 深搜 或者 拓扑排序判断相关题目:课程表2 找到最终安全状态原创 2021-07-10 06:12:42 · 96 阅读 · 0 评论 -
BFS 844. 走迷宫 845. 八数码
文章目录844. 走迷宫845. 八数码844. 走迷宫给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m) 处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。输入格式第一行包含两个整数 n 和 m。接下来 n 行,每行包含原创 2021-06-07 08:51:33 · 91 阅读 · 0 评论 -
DFS: 842. 排列数字
文章目录842. 排列数字843. n-皇后问题842. 排列数字给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数 n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围1≤n≤7输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1思路:用DFS暴力枚举递归出口:当字符长度为n时,弹栈代码:N = int(input())pat原创 2021-05-27 22:54:36 · 102 阅读 · 0 评论 -
hash: 841. 字符串哈希
841. 字符串哈希给定一个长度为 n 的字符串,再给定 m 个询问,每个询问包含四个整数 l1,r1,l2,r2,请你判断 [l1,r1] 和 [l2,r2] 这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数 n 和 m,表示字符串长度和询问次数。第二行包含一个长度为 n 的字符串,字符串中只包含大小写英文字母和数字。接下来 m 行,每行包含四个整数 l1,r1,l2,r2,表示一次询问所涉及的两个区间。注意,字符串的位置从 1 开始编号。原创 2021-05-26 07:25:17 · 69 阅读 · 0 评论 -
字符匹配 835. Trie字符串统计
835. Trie字符串统计维护一个字符串集合,支持两种操作:I x 向集合中插入一个字符串 x;Q x 询问一个字符串在集合中出现了多少次。共有 N 个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。输入格式第一行包含整数 N,表示操作数。接下来 N 行,每行包含一个操作指令,指令为 I x 或 Q x 中的一种。输出格式对于每个询问指令 Q x,都要输出一个整数作为结果,表示 x 在集合中出现的次数。每个结果占一行。数据范围1≤N≤2∗104输入样例:5原创 2021-05-23 06:38:25 · 60 阅读 · 0 评论 -
滑动窗口问题 830. 单调栈
830. 单调栈给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。输入格式第一行包含整数 N,表示数列长度。第二行包含 N 个整数,表示整数数列。输出格式共一行,包含 N 个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在则输出 −1。数据范围1≤N≤1051≤数列中元素≤109输入样例:53 4 2 7 5输出样例:-1 3 -1 2 2思路很简单,维护一个单调栈m = int(input())data原创 2021-05-22 09:00:02 · 126 阅读 · 0 评论 -
803. 区间合并
803. 区间合并给定 n 个区间 [li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。输入格式第一行包含整数 n。接下来 n 行,每行包含两个整数 l 和 r。输出格式共一行,包含一个整数,表示合并区间完成后的区间个数。数据范围1≤n≤100000,−109≤li≤ri≤109输入样例:51 22 45 67 87 9输出样例:3思路很简单,原创 2021-05-20 03:24:33 · 698 阅读 · 0 评论 -
区间和问题:802. 区间和
802. 区间和假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。现在,我们首先进行 n 次操作,每次操作将某一位置 x 上的数加 c。接下来,进行 m 次询问,每个询问包含两个整数 l 和 r,你需要求出在区间 [l,r] 之间的所有数的和。输入格式第一行包含两个整数 n 和 m。接下来 n 行,每行包含两个整数 x 和 c。再接下来 m 行,每行包含两个整数 l 和 r。输出格式共 m 行,每行输出一个询问中所求的区间内数字和。数据范围−109≤x≤109,1≤n,m≤105原创 2021-05-20 00:19:45 · 235 阅读 · 0 评论 -
位运算:801. 二进制中1的个数
801. 二进制中1的个数给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。输入格式第一行包含整数 n。第二行包含 n 个整数,表示整个数列。输出格式共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 1 的个数。数据范围1≤n≤100000,0≤数列中元素的值≤109输入样例:51 2 3 4 5输出样例:1 1 2 1 2思路很简单。代码:#include <iostream>using na原创 2021-05-18 08:10:48 · 118 阅读 · 0 评论 -
双指针问题:800. 数组元素的目标和,2816. 判断子序列
文章目录800. 数组元素的目标和2816. 判断子序列800. 数组元素的目标和给定两个升序排序的有序数组 A 和 B,以及一个目标值 x。数组下标从 0 开始。请你求出满足 A[i]+B[j]=x 的数对 (i,j)。数据保证有唯一解。输入格式第一行包含三个整数 n,m,x,分别表示 A 的长度,B 的长度以及目标值 x。第二行包含 n 个整数,表示数组 A。第三行包含 m 个整数,表示数组 B。输出格式共一行,包含两个整数 i 和 j。数据范围数组长度不超过 105。同一数原创 2021-05-18 07:52:48 · 80 阅读 · 0 评论 -
差分问题: 797. 差分 798. 差分矩阵
文章目录797. 差分798. 差分矩阵差分问题是前缀和问题的更近一步,前缀和问题解决得主要是在一块数据中多次查找和问题。它令查找和得时间复杂度变成了O(1),但是令修改变成了O(n)差分则是在一块数据块中多次修改数据,查询少量的问题。它令修改的时间复杂度变成了O(1),但是令查找变成了O(n)797. 差分输入一个长度为 n 的整数序列。接下来输入 m 个操作,每个操作包含三个整数 l,r,c,表示将序列中 [l,r] 之间的每个数加上 c。请你输出进行完所有操作后的序列。输入格式第一行包原创 2021-05-17 02:26:17 · 169 阅读 · 0 评论 -
前缀和问题, 796. 子矩阵的和
796. 子矩阵的和输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数 n,m,q。接下来 n 行,每行包含 m 个整数,表示整数矩阵。接下来 q 行,每行包含四个整数 x1,y1,x2,y2,表示一组询问。输出格式共 q 行,每行输出一个询问的结果。数据范围1≤n,m≤1000,1≤q≤200000,1≤x1≤x2≤n,1≤y1原创 2021-05-16 05:22:17 · 139 阅读 · 0 评论 -
高精度运算,792. 高精度减法 794.高精度除法
792. 高精度减法给定两个正整数,计算它们的差,计算结果可能为负数。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的差。数据范围1≤整数长度≤105输入样例:32 11输出样例:21思路:模拟列竖式,注意借位与两者大小关系即可。代码:#include <iostream>#include <vector>using namespace std;//默认a比b大vector<int> sub(vector<原创 2021-05-16 03:23:38 · 77 阅读 · 0 评论 -
高精度运算,791. 高精度加法 793.高精度乘法
高精度运算,791. 高精度加法给定两个正整数,计算它们的和。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的和。数据范围1≤整数长度≤100000输入样例:1223输出样例:35难度:简单时/空限制:1s / 64MB总通过数:20282总尝试数:32320来源:模板题算法标签思路:和我们列竖式差不多代码:#include<iostream>#include<vector>using namespace std;原创 2021-05-15 08:24:14 · 158 阅读 · 0 评论 -
二分算法,790. 数的三次方根
二分算法,790. 数的三次方根给定一个浮点数 n,求它的三次方根。输入格式共一行,包含一个浮点数 n。输出格式共一行,包含一个浮点数,表示问题的解。注意,结果保留 6 位小数。数据范围−10000≤n≤10000输入样例:1000.00输出样例:10.000000难度:简单时/空限制:1s / 64MB思路: 使用二分进行数据逼近#include<iostream>#include <cmath>using namespace std;原创 2021-05-15 00:08:01 · 237 阅读 · 0 评论 -
二分查找,789数的范围
二分查找,789数的范围给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。如果数组中不存在该元素,则返回 -1 -1。输入格式第一行包含整数 n 和 q,表示数组长度和询问个数。第二行包含 n 个整数(均在 1∼10000 范围内),表示完整数组。接下来 q 行,每行包含一个整数 k,表示一个询问元素。输出格式共 q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,原创 2021-05-14 22:59:34 · 111 阅读 · 0 评论