数据结构与算法
本人数据结构与算法学习记录
huzimu_
坚持不懈,不屈不挠
展开
-
二分法模板(两种二分,防止死循环)
二分法模板二分法有两套模板,根据check(mid) 时调整的是left还是right,来确定求mid时要不要加1。如果是调整left,需要加1,防止死循环,因为整数除法向下取整。具体实现如下:模板一while (left < right){ int mid = left + (right - left) / 2; if (check(mid) == true) right = mid; else left = mid + 1;}模板二while (left < right)原创 2021-09-14 16:48:16 · 746 阅读 · 0 评论 -
CSP:疫苗运输
疫苗运输涉及如下知识点:迪杰斯特拉算法扩展欧几里得算法目前还不会做,先记录一下参考题解的文章链接吧。AcWing 3415.疫苗运输LeetCode 第 22 次 CCF CSP 认证战记原创 2021-08-16 21:27:00 · 2489 阅读 · 3 评论 -
迪杰斯特拉算法(Dijkstra)
迪杰斯特拉算法(Dijkstra)思路:每次将距离起点v0最近的定点加入集合S,初始时v0位于集合S,体现为标记数组是否已经被标记;对于尚未求出最短距离的点的集合T,每次从中选取一个距离v0最近的顶点加入S,其路径只能通过S中顶点中转,体现为每选出一个点就更新T中其他的点;代码实现:#include <iostream>#define MAX 1000000using namespace std;int arcs[10][10]; // 邻接矩阵int D[10]; //原创 2021-08-25 19:35:02 · 108 阅读 · 0 评论 -
扩展欧几里得算法
扩展欧几里得算法a * x + b * y = gcd(a, b)推导过程:a * x + b * y = d;如果 d mod gcd(a, b) == 0,则有a * x1 + b * y1 = d,b * x2 + (a % b) y2 = d; // gcd(a, b) = gcd(b, a % b)又 a % b = a - (a / b) * b;代入上式后,联立得:a * y2 + b * (x2 - (a / b) * y2) = d;对照 a * x1 + b *原创 2021-08-25 18:38:57 · 56 阅读 · 0 评论 -
C++优先队列priority_queue默认为大顶堆
C++优先队列priority_queue默认为大顶堆定义如下:template <typename T,typename Container=std::vector,typename Compare=std::less >class priority_queue{//…}typename T:指定存储元素的具体类型;typename Container:指定 priority_queue 底层使用的基础容器,默认使用 vector 容器。typename Compare:原创 2021-08-17 22:45:45 · 1476 阅读 · 0 评论 -
LeetCode 994. 腐烂的橘子
腐烂的橘子原题链接用到的知识点:多源广度优先搜索。时间复杂度:O(mn);空间复杂度O(mn)。代码片段如下:class Solution {public: int orangesRotting(vector<vector<int>>& grid) { vector<vector<int>> d = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; int m = grid.原创 2021-08-17 16:25:44 · 85 阅读 · 0 评论 -
数据结构实验一:一元多项式的乘法与加法运算
题目描述输入两行,每行一个多项式,格式 n, c1, e1, c2, e2 …n为非零项的项数,c为系数,e为幂数。输出一行,格式同输入。输入可以是乱序的,但需要按降幂存储。输出是按降幂输出的。C语言链表实现我是用单链表实现的,很久没写C语言链表了,排序图省事,就直接交换数值了,还有多项式加法部分,因为链表内存访问一直出问题,暂时就没加上去。链表实现时间和内存开销都很大。#include <stdio.h>#include <stdlib.h>typedef s原创 2021-03-05 22:22:16 · 1523 阅读 · 1 评论