算法
KRYON!
这个作者很懒,什么都没留下…
展开
-
DFS生成森林代码
DFS生成森林代码typedef char TElemType;typedef struct CSNode{ TElemType data; CSNode *firstChild, *nextSibling;}CSNode,*CSTree; void DFSForest(Graph G,CSTree &T){ T = NULL; //生成森林的根 bool visited[MAXSIZE]; //标记 for(int i = 0; i < G.vexnum; i+原创 2020-12-16 15:18:02 · 618 阅读 · 0 评论 -
在表达式 T(n) = 2T(n/2) + O(1) 与 T(1) = O(1) 中,T(n) 的时间复杂度为多少?
在表达式 T(n) = 2T(n/2) + O(1) 与 T(1) = O(1) 中,T(n)的时间复杂度为多少?翻译 2020-02-20 20:16:37 · 4661 阅读 · 1 评论 -
[leetcode]746. 使用最小花费爬楼梯
动态规划:dp[i]表示爬上第i级楼梯的最小花费class Solution {public: int minCostClimbingStairs(vector<int>& cost) { cost.push_back(0); //后面加个0,将阶梯顶视为第n层(没加0前的第n层,加0后的第n-1层) int n = cost....原创 2020-02-20 18:17:20 · 164 阅读 · 0 评论 -
[leetcode]70. 爬楼梯
动态规划:dp[i]:表示到第i阶有多少种爬法dp[0] = 0dp[1] = 1:1;dp[2] = 2:1+1;2;dp[3] = 3:1 + 1 + 1‾\underline{1}1; 2 + 1‾\underline{1}1; 1 + 1‾\underline{1}1;爬上 i−1 阶楼梯的方法数量。因为再爬1阶就能到第i阶爬上 i−2 阶楼...原创 2020-02-20 17:53:38 · 105 阅读 · 0 评论 -
[leetcode]16. 最接近的三数之和
class Solution {public: int threeSumClosest(vector<int>& nums, int target) { int res = 0; int minDiff = INT_MAX/10; sort(nums.begin(), nums.end()); for(...原创 2020-02-20 17:22:44 · 112 阅读 · 0 评论 -
[leetcode]15. 三数之和
双指针class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>>res; if(nums.size() == 0) { ...原创 2020-02-20 12:27:09 · 99 阅读 · 0 评论 -
[leetcode] 472. 连接词
字典树struct TrieNode{ bool isEnd; TrieNode *next[26]; TrieNode() { isEnd = false; memset(next, 0, sizeof(next)); }};class Trie{ TrieNode* root;public: ...原创 2020-02-19 22:55:49 · 163 阅读 · 0 评论 -
[leetcode]648. 单词替换 --前缀树(字典树)应用
struct TrieNode{ bool isEnd; TrieNode *next[26]; TrieNode() { isEnd = false; memset(next, 0, sizeof(next)); }};class Dict{private: TrieNode *root;public...原创 2020-02-13 22:35:05 · 212 阅读 · 0 评论 -
[leetcode]211. 添加与搜索单词 - 数据结构设计 ---前缀树解法
前缀树解法:struct TrieNode{ bool isEnd; TrieNode *next[26]; TrieNode() { isEnd = false; memset(next, NULL, sizeof(next)); }};class WordDictionary {private: Tri...原创 2020-02-13 17:49:41 · 139 阅读 · 0 评论 -
[leetcode]208. 实现 Trie (前缀树)
struct TrieNode{ bool isEnd; // 是否是一个单词的结束 TrieNode *next[26]; TrieNode() { isEnd = false; memset(next, NULL, sizeof(next)); }};class Trie {private: Trie...原创 2020-02-13 17:11:04 · 119 阅读 · 0 评论 -
[leetcode]146. LRU缓存机制
1、LRU(最近最少使用)缓存机制:https://baike.baidu.com/item/LRU/1269842?fr=aladdin2、用到的数据结构:struct Value{ int value; list<int>::iterator iter; //key在m_list中位置用迭代器(指向该节点的指针) Value(int _v...原创 2020-01-31 16:15:45 · 116 阅读 · 0 评论 -
[leetcode]1131. 绝对值表达式的最大值 --绝对值表达式枚举拆分的方法
1、重要的数学推导:|a| = Max(a, -a)|a-b|+|c-d|= Max(a-b, b-a) + Max(c-d, d-c) // max(a-b, -(a-b)) + max(c-d, -(c-d))= Max{ (a-b)+(c-d), (b-a)+(c-d), // -(a - b) + (c - d) (a-b)+(d-c), (b-a)+...原创 2020-01-30 21:56:24 · 500 阅读 · 0 评论 -
归并排序
1、介绍:算法动画:(来自维基:https://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F)2、简单版本:版本1:#include<iostream>using namespace std;void merge(int arr[], int left, int mid, int right)...转载 2019-12-25 19:43:51 · 279 阅读 · 0 评论 -
[leetcode]240. 搜索二维矩阵 II
行、列二分:class Solution {public: bool binsearch(vector<vector<int>>& matrix, int target, int start, bool vertical) { int low = start; int high = vertical ? matr...转载 2019-12-24 11:03:34 · 95 阅读 · 0 评论 -
[leetcode] 839. 相似字符串组并查集
class USF{ public: int *parent; int *rank; int groupCount; //组数 USF(int n) { parent = new int[n]; rank = new int[n]; groupCount = n; for(int...原创 2019-12-23 20:35:40 · 169 阅读 · 0 评论 -
2019第十届蓝桥杯B组C++省赛E题迷宫--BFS(倒搜)
试题 E: 迷宫本题总分:15 分【问题描述】下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可以通行的地方。010000000100001001110000迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫, 一共 10 步。其中 D...原创 2019-10-09 18:07:59 · 514 阅读 · 0 评论 -
[leetcode]1293. 网格中的最短路径
struct Node{ int x, y; int rest; //还可以消几个障碍物 int dist; //距离 Node(int _x,int _y, int _rest, int _dist) :x(_x), y(_y), rest(_rest),dist(_dist){}};class Solution { stati...原创 2019-12-18 20:52:56 · 1008 阅读 · 3 评论 -
leetcode 120. 三角形最小路径和
[ [2], [3,4], [6,5,7], [4,1,8,3]]实际存储:[ [2], [3,4], [6,5,7], [4,1,8,3]]只能向下或右下动态方程:dp[i][j] = min(dp[i-1][j-1],dp[i-1][[j]) + triangle[i][j]写法1:自顶向下class Solut...原创 2019-12-07 17:04:07 · 82 阅读 · 0 评论 -
leetcode64. 最小路径和
解法:用动态规划,因为只能向右或向下走,即当当前坐标为[i][j]时,下一步只能是[i][j+1]或[i+1][j],反过来,cost[i][j]为从[0][0]到[i][j]的距离,只能从[i][j-1]或[i-1][j]到[i][j],所以:cost[i][j] = min(cost[i][j-1],cost[i-1][j]) + grid[i][j]class Solution {...原创 2019-12-07 14:58:24 · 78 阅读 · 0 评论 -
删数问题
给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n和k,设计一个算法,找出剩下数字组成的新数最小的删数方案。输入示例: 178543 4输出: 13方法:从高位->低位方向搜索递减区间,若不存在,删最后一位,存在,删递减区间第一位,循环k次**#include<iostream>#include<string>...原创 2019-12-07 11:30:58 · 236 阅读 · 0 评论 -
377. 组合总和 Ⅳ
class Solution {public: int combinationSum4(vector<int>& nums, int target) { if(nums.size() == 0 || target <= 0) { return 0; } vector<...原创 2019-12-06 19:23:35 · 112 阅读 · 0 评论 -
216. 组合总和 III
class Solution {private: vector<vector<int> >res; vector<int>path; void DFS(int start, int k, int pos, int n, int sum) { if(k == pos) //有三个了 { ...原创 2019-12-06 19:06:39 · 96 阅读 · 0 评论 -
40. 组合总和 II
1、class Solution {private: vector<int>candidates; vector<vector<int>>res; vector<int>path; void DFS(int start,int target) { if(target == 0) ...原创 2019-12-06 19:02:14 · 103 阅读 · 0 评论 -
leetcode--组合总数
1、剪枝+回溯:class Solution {private: vector<int> candidates; vector<vector<int>> res; vector<int>path; void DFS(int start, int target) { if(target ==...原创 2019-12-06 18:37:35 · 161 阅读 · 0 评论 -
把合数分解成若干个质因数相成
题目:#include<iostream>#include<vector>using namespace std;void fractor(vector<int>& res,int num){ int i = 2; while(num > 1) { if(num % i == 0) { res.push_back...原创 2019-12-04 16:44:50 · 1393 阅读 · 0 评论 -
快排的实现
一、快排介绍:快排的思想是分治法(二分法),排序时选个数x,把小于等于x的放x左边,大于等于x的放x右边,然后再对左边、右边递归排序void quickSort(int arr[],int low,int hight){ if(low < hight) { int mid = partition(arr,low,hight); //分区:分成[low,mid-1],mid,[...原创 2019-12-03 20:44:46 · 402 阅读 · 0 评论 -
有向图的传递闭包实现三种实现(Warshall+DFS+BFS)
一、传递闭包:定义:有n个顶点的有向图的传递闭包可以定义为一个n阶布尔矩阵T[n][n],如果i能到j则T[i][j] =1,否则T[i][j] =0意义:对于无向图,我们可以通过并查集来实现两个顶点是否有通路的快速查询。但有向图不能有并查集,所以现在可以用传递闭包了(当然无向图也可以用)通过Floyd-Warshall算法https://blog.csdn.net/qq_4069105...原创 2019-11-30 17:30:50 · 2127 阅读 · 0 评论 -
带权有向无环图的最短路径(使用拓扑排序的方法)
声明:我测试的样例答案都正确,如果代码有问题还请指出。代码:#include<iostream>#include<list>#include<vector>#include<queue>#include<set>#include<memory.h> #include<time.h>#define ...原创 2019-11-30 16:14:57 · 1815 阅读 · 0 评论 -
n皇后---一维数组解法
代码:#include<iostream>#include<cmath>using namespace std; const int n = 8;void Queen(int chess[],int k, int &sum){ bool flag; //用于标志当前布局是否可行 if(k <= n) { for(int i...原创 2019-11-10 14:51:32 · 485 阅读 · 0 评论 -
C++优先队列自定义排序总结
一、优先队的使用:二、基本数据类型:priority_queue<int> q;//默认是从大到小priority_queue<int, vector<int> ,less<int> >q;//从大到小排序priority_queue<int, vector<int>, greater<int> >q...原创 2019-11-02 17:31:51 · 15674 阅读 · 1 评论