
算法
编程竞赛知识整合宝藏网站https://oi-wiki.org/
polar-bear-lily
这个作者很懒,什么都没留下…
展开
-
【C++】最长递增子序列
https://leetcode-cn.com/problems/longest-increasing-subsequence/class Solution {public: int lengthOfLIS(vector<int>& nums) { int len = 1, n = nums.size(); if (n == 0) return 0; vector<int> d(n, 0);//d[i]是长度为i原创 2021-08-10 01:42:20 · 1743 阅读 · 0 评论 -
【力扣】动规习题
1959. K 次调整数组大小浪费的最小总空间https://leetcode-cn.com/problems/minimum-total-space-wasted-with-k-resizing-operations/原创 2021-08-10 01:30:15 · 155 阅读 · 0 评论 -
【C++】环形数组(图是否有环)
https://leetcode-cn.com/problems/circular-array-loop/存在一个不含 0 的 环形 数组nums ,每个 nums[i] 都表示位于下标 i 的角色应该向前或向后移动的下标个数:如果 nums[i] 是正数,向前 移动 nums[i] 步如果nums[i] 是负数,向后 移动 nums[i] 步因为数组是 环形 的,所以可以假设从最后一个元素向前移动一步会到达第一个元素,而第一个元素向后移动一步会到达最后一个元...原创 2021-08-10 00:06:40 · 872 阅读 · 0 评论 -
【C++】环形链表
用快慢指针判断是否存在环https://leetcode-cn.com/problems/linked-list-cycle///结点定义struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};bool hasCycle(ListNode *head) { if (head == nullptr || head->next == n原创 2021-08-09 23:27:55 · 351 阅读 · 0 评论 -
【C++】访问无向连通图的最短路径
https://leetcode-cn.com/problems/shortest-path-visiting-all-nodes/存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号。给你一个数组 graph 表示这个图。其中,graph[i] 是一个列表,由所有与节点 i 直接相连的节点组成。返回能够访问所有节点的最短路径的长度。你可以在任一节点开始和停止,也可以多次重访节点,并且可以重用边。示例 1:输入:graph = [[1,2,3],[0].原创 2021-08-09 14:22:26 · 1931 阅读 · 0 评论 -
【C++】Floyd算法求所有点对之间的最短路径(弗洛伊德、插点法)
思想:动态规划。图中共有n个顶点,定义一个n阶方阵矩阵序列,其中,arcs为带权有向图的邻接矩阵;根据以下转移方程迭代其中是从顶点 i 到 j、中间顶点的序号不大于k的最短路径的长度。每迭代一次,从 i 到 j 的最短路径上就多考虑一个顶点;n次迭代后,得到任意一对顶点之间的最短路径。时间复杂度允许图中有带负权值的边,不允许有包含负权值边的回路。//graph为无向连通图的邻接表(不带权)void shortestPathLength(vector<vector<int>&g原创 2021-08-09 14:02:40 · 391 阅读 · 0 评论 -
【C++】拓扑排序
定义:一个有向无环图的顶点组成的序列(可遍历图所有顶点的一条单向链表),需满足两个条件:(1)该序列中包含图的每个顶点,且只出现一次;(2)若排序中A在B的前面,则图中不存在B到A的路径;步骤:(1)从图中找一个入度为0的顶点A,加到路径(2)从图中删除顶点A和A的出边(以A为起点的有向边)(3)重复(1)(2),知道图为空若最终图不为空,即剩下了入度不为0的顶点,则图必然有环例题:https://leetcode-cn.com/problems/find-eventual-safe-原创 2021-08-06 01:24:21 · 674 阅读 · 0 评论 -
【C++】单调栈
例题:https://leetcode-cn.com/problems/number-of-visible-people-in-a-queue/有n个人排成一个队列,从左到右编号为0到n - 1。给你以一个整数数组heights,每个整数 互不相同,heights[i]表示第i个人的高度。一个人能 看到 他右边另一个人的条件是这两人之间的所有人都比他们两人 矮。更正式的,第i个人能看到第j个人的条件是i < j且min(heights[i], heights[...原创 2021-08-03 23:21:31 · 329 阅读 · 1 评论 -
【C++】Dijkstra单源最短路径(迪杰斯特拉)
思想:贪心。将所有节点分成两类:已确定从起点到当前点的最短路径长度的节点,以及未确定从起点到当前点的最短路长度的节点。(下面简称「未确定节点」和「已确定节点」)。每次从「未确定节点」中取一个与起点距离最短的点,将它归类为「已确定节点」,并用它「更新」从起点到其他所有「未确定节点」的距离。直到所有点都被归类为「已确定节点」。数据:(1)集合S:已求得的最短路径顶点,初始化把源点v0放入(2)数组dist[]:从源点v0到顶点i当前的最短路径长度,初始化为MAX(3)arcs[0][i]:图的邻接矩原创 2021-08-02 23:20:34 · 409 阅读 · 0 评论 -
状态压缩DP
将一个状态转化成一个数,如[1,0,1,0,1,0]可用二进制数101010直接表示,常用于动规、搜索等详情参考https://www.cnblogs.com/mxrmxr/p/9799832.html原创 2021-07-11 13:51:54 · 118 阅读 · 0 评论 -
【C++】快速幂与矩阵快速幂
快速幂:int fastpow(int base,int n,int mod){ int ans=1; while(n){ if(n&1) ans*=base%mod; base*=base; n>>=1; } return ans%mod;}取模是避免溢出,因为幂运算结果可能太大。同模原理:A*B % C = (A%C * B%C)%C...原创 2021-07-11 13:25:24 · 590 阅读 · 0 评论 -
【C语言待实现】矩阵相乘 分治和Strassen
【暴力】int** get_matrix(int n) { int** c; c = (int**)malloc(sizeof(int*) * n);//为二维数组分配n行 for (int i = 0; i < n; ++i) {//为每列分配n个空间 c[i] = (int*)malloc(sizeof(int) * n); } return c;}//暴力相乘int** square_matrix_multiply(int** a, int**b, int n)原创 2020-12-20 23:32:07 · 918 阅读 · 1 评论 -
【C语言】分治和动规 最大子数组问题
子数组内数字的和最大1、分治设立数组中点A[mid],将数组分为左半和右半部分,子数组只可能存在于三个位置:(1)左半部分(2)右半部分(3)跨越了中点对于(1)(2),可以不断的作中点进行划分,递归的求解对于(3),因为有位置限制,子数组左半部分一定以A[mid]结尾,右半部分一定以A[mid]开头,相当于求左半部分最大子数组+A[mid]+右半部分最大子数组:【解答】#include <stdio.h>//求跨越了中点的部分int find_max_..原创 2020-12-16 19:05:04 · 274 阅读 · 0 评论 -
【C语言】字符串模式匹配KMP算法
相对于暴力匹配,kmp匹配在匹配失败后的下一轮匹配中,不一定将模式字符串从头重新开始去匹配,而是在模式字符串中滑动一段才开始匹配,如第四趟匹配模式字符串滑动多少距离由next数组决定,next数组只与模式串p有关,记录了模式串p[0]...p[i]这段子串的最大公共前后缀长度比如第三趟:abaab是能匹配的部分,后缀ab=前缀ab,这部分已相等的匹配已经得到确认,那可以在下一趟中直接省略,即滑动掉这段前缀进行后续的匹配求next数组:初始化next[0]=-1,模式串自身进行匹配。 a..原创 2020-12-16 00:12:50 · 1721 阅读 · 0 评论 -
【Java】深度优先搜索DFS与广度优先搜索BFS
1、深度优先搜索DFS(Deep First Search)(1)向一个方向递归下去(2)未找到且碰到边界,回溯(3)向下一个方向继续递归下去(4)反复,直到找到【基础实现】import org.junit.Test;public class Dfs { int row = 5, column = 4; //地图 int[][] graph = new int[row][column]; //记录地图上的点是否走过 int[][] passed = n原创 2020-07-29 11:56:20 · 212 阅读 · 0 评论 -
【Java】一些哈希算法的了解
1、Java的HashCode/** The value is used for character storage. */ private final char value[];//把String缓存成字符数组/* @param value * The initial value of the string */ public Stri...原创 2019-09-12 17:25:49 · 583 阅读 · 0 评论