![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
文章平均质量分 50
rookie_yanyu
这个作者很懒,什么都没留下…
展开
-
螺旋矩阵常数复杂度解法
螺旋矩阵 吐槽 昨天参加leetcode编程大赛,做到这题,本想着使用模拟法解决,一看数据规模达到10^9,我有预感这题应该是数学解法,那么我就不会了,之后上网查文档,发现这题是一种数学问题,看了别人的论文,想套用别人的公式,一顿提交,疯狂WA,心态爆炸,现在觉得把这题的O(1)时间复杂度的解法写出来,希望之后有人碰到这个问题时可以不用去筛各种帖子。。。 题意 一个 n 行 n 列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第 0 行第 0 列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,原创 2021-04-06 19:49:54 · 259 阅读 · 0 评论 -
常用算法之正则表达式匹配
正则表达式匹配 介绍 请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa.a"和"ab*a"均不匹配。 示例 1: 输入: s = “aa” p = “a” 输出: false 解释: “a” 无法匹配 “aa” 整个字符串。 示例 2: 输入: s = “aa” p = “a*” 输出: true 解释原创 2021-03-31 15:15:21 · 188 阅读 · 0 评论 -
随机函数相关题
Rand() 1.拒绝采样 用rand7()实现rand10() #include <bits/stdc++.h> using namespace std; int rand7(){ return rand() % 7 + 1; } int rand10(){ // (randX - 1) * Y + rand7() 可以实现randX_Y() while (true){ int a = rand7(); int b = rand7(); int num = (a - 1)原创 2021-03-16 21:17:59 · 94 阅读 · 0 评论 -
最短路径问题之Dijkstra算法
Dijkstra算法 吐槽 今天参加了leetcode周赛,第三题一眼就看出需要使用到一点到多点的最短距离,第一反应就是Dijkstra算法,奈何平时基本没写过几遍Dijkstra算法,模本没整理好,导致手忙脚乱,四处考古,最后压时提交,还是WA…,很烦,所以花时间把Dijkstra算法,完整的写一遍。 后续可能还会把Floyd算法,SPFA算法,Bellman-Ford算法手撕一遍,做到基本图论问题一网打尽。 简介 解决什么问题 一个图中,求一点到其他点的最短距离。PS:如果仅求一个点到另一个点的最短距离原创 2021-03-07 18:46:35 · 195 阅读 · 0 评论 -
与状态压缩问题相关的小trick:二进制子集
二进制子集: 状态压缩中可能涉及到的常用小trick。 问题解析 假设二进制状态为bitmask = 10101(对应十进制为 13), 那么其子集为{00001,00100,10000,00101,10001,10100,10101}。 对应子集的十进制为{1,4,8,5,9,12,13}。 根据组合排列原理,已知1的个数有3个,那么我们知道它的子集中元素个数为2^3 - 1,1的个数有n个,那么子集中元素个数为2^n - 1。 如何找出该二进制状态的子集呢? 代码 #include <bits/s原创 2021-02-26 20:09:28 · 84 阅读 · 0 评论 -
数据结构之优先队列
优先队列 模板 模板:priority_queue<Type, Container, Functional> Type:进入队列的数据类型 Container:保存数据的容器(一般vector,deque,不能使用list) Functional:元素比较方式 默认比较方式 一般默认priority_queue(默认大顶堆): 以int为例:priority_queue : 大顶堆实现,等价于priority_queue<int,vector,less>,出队列时元素会按照从大到小顺原创 2021-02-24 21:04:18 · 92 阅读 · 0 评论 -
图论之克鲁斯卡尔(kruskal)算法
最小生成树之克鲁斯卡尔算法 例题 给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [xi, yi] 。 连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 :|xi - xj| + |yi - yj| ,其中 |val| 表示 val 的绝对值。 请你返回将所有点连接的最小总费用。只有任意两点之间 有且仅有 一条简单路径时,才认为所有点都已连接。 示例 1: 输入:points = [[0,0],[2,2],[3,10],[5,2],[7原创 2021-01-20 20:58:35 · 322 阅读 · 0 评论