![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
eryihahaha
这个作者很懒,什么都没留下…
展开
-
ACwing 刷题 冲冲冲!
数据结构AcWing 826. 单链表数据结构: 用数组构造邻接表存储链表int h[N], e[N], ne[N], head, idx;h[N]: 对于图这类有多个头节点的(每个节点都是一个)来存储头节点head:用于单链表e[N]: 存储value用ne[N]: 存储链表中下一个节点的idxidx按照插入顺序计数的一个传递下标main code analysis:这里使用的h[N] 是用来存储图,树这类有多个头节点的链表结构的,本题为单链表,因而定义一个head即可。初始化原创 2021-06-27 11:28:38 · 53 阅读 · 0 评论 -
数据结构-DFS
1. 八皇后问题 可以使用一个数组存储八皇后的对角线关系对角线 dg[u+i]dg[u+i],反对角线udg[n−u+i]udg[n−u+i]中的下标 u+i 和 n−u+i 表示的是截距 (u为行 i为列)原创 2021-05-01 21:25:15 · 102 阅读 · 0 评论 -
C++ 做题小点
string 转 intstoi()string rfind返回的是从后到前第一个位置的下标switch不能使用 stringstring 转 char*string.c_str()原创 2021-03-20 21:00:07 · 48 阅读 · 0 评论 -
算法-数学问题
1. 最大公因数的系数int xGCD(int a, int b, int &x, int &y) {if (!b) {x = 1, y = 0;return a;}int x1, y1, gcd = xGCD(b, a % b, x1, y1);x = y1, y = x1 - (a / b) * y1;return gcd;}原创 2021-03-06 21:13:56 · 74 阅读 · 0 评论 -
数据结构-树 刷题总结
路径总和III题目思路分析:关于这题我得第一思路是分别对左节点与右节点做两种不同类型得搜索见下: solution(sum_n,root->left); solution(0,root->left); solution(sum_n,root->right); solution(0,root->right);这个真是一种很傻得写法,对同一个节点进行了两次搜索,这样到下一步再进行搜索得时候肯定会发生重复的鸭!!原创 2021-03-01 19:32:28 · 114 阅读 · 0 评论 -
C++ STL+滑动窗口
题目解析 今天遇到一个需要实时维护连续子序列最大与最小值的题,并且需要删除与添加元素,如果使用queue的话只能push与pop,不能删除任意值,因而这里使用了multiset细节说明:multiset 插入数据使用s.insert();找到最大值使用 *s.rbegin() //最后一个元素而不是最后一个元素下一个;找到最小值使用 *s.begin();删除:s.erase();查找:s.find()//返回一个迭代器;代码class Solution {public: int.原创 2021-02-22 00:31:38 · 205 阅读 · 0 评论 -
滑动窗口+差分数组
题目解析:题目要求同时翻转K个长度的子数组,首先贪心策略很好想到就是在操作上有些问题,如果每次都进行发转那么会超时的,我们需要想一个办法使得时间复杂度从O(N×K)降到O(N)题解中思路是使用了差分数组来记录反转次数,并且巧妙利用了差分数组的性质,即:对 [i-i+K] 的数组进行反转,只会影响diff(差分数组)的i与i+K+1为的值,其余的值都不会受到影响,因而我们自然就不必对其进行任何操作了,这样我们就可以在O(N)的时间复杂度内得到个位的反转次数。代码...原创 2021-02-20 15:50:54 · 203 阅读 · 0 评论 -
数据结构-BFS
题目解析: 本题考查DFS/BFS的联合应用,首先我们搜索出一个岛屿之后通过BFS找到两个岛屿之间的最近距离即可。重点: 这里的考点在于BFS层数的设置,我们可以通过记录队列中节点个数来达到效果。一次只搜索一层的节点。 while(!q.empty()) { level++; int q_size = q.size(); while(q_size--) { .原创 2021-02-20 14:46:21 · 279 阅读 · 0 评论 -
快排的应用----Kth Largest Element in an Array
题目描述:题目解析题目要求在未排序的数组中找到第K大元素,一般都是需要进行排序的,但是有没有方法可以使得其降到O(n)呢?思考一下快速排序中每次选择的一个key,之后都可以确定出这个key在数组中的具体位置,进而如果key所在的下标正好是我们要找的那个K的时候就可以直接进行返回,否则的话需要根据大于还是小于分别进行搜索。题目代码class Solution {public: int quick_select_k(vector<int>& nums,int l,int原创 2021-02-11 12:05:27 · 64 阅读 · 0 评论 -
状态压缩DP
find the lowest 1 and highest 1inline int lowbit(int x){return x&(-x); //负数存储 按位取反加一 正好只有最后一位1不变}inline int highbit(int x){int p = low_bit(x);while(p!=x) x-=p,p=low_bit(x);return p;}位运算总结int A;int c;A|=1<<c;//insert cA&=.原创 2021-02-07 22:16:21 · 44 阅读 · 0 评论 -
C++ STL sort刨析 与 模板类的自定义cmp对比
1. 设置环境变量 线程数omp_set_num_threads(3);2.原创 2021-02-05 16:43:40 · 88 阅读 · 0 评论 -
滑动窗口
问题分析:题目的内容易于理解,为从一个固定的窗口中找到其中位数,我们要完成的任务是维护一个有序的子序列,如果直接排序的话会超时,可以想到每次其实只是增加了一个元素与删除了一个元素而已step1 : 找到已经排好序的数组里的要删除的元素进行删除操作step2:将新插入的元组插入到有序数组中代码1class Solution {public: vector<double> medianSlidingWindow(vector<int>& nums, int .原创 2021-02-04 00:44:25 · 63 阅读 · 0 评论 -
2021-01-17 刷题总结 Leetcode 周赛
周赛第二题:总结踩坑:再比赛过程中写这个题的时候只想到了可以从选取的两数来划分三个区间,之后在两端或者中间区间内取数,这样做的时间复杂度在 n3n^3n3 因而TLE了正确解法:可以首先预处理出任意两数乘积结果对应的的数目,将其存入hash表中(因为最大的乘积结果可能太大了,所以没用数组),之后任意组合乘积相同的两个数,即可;代码:class Solution {public: int tupleSameProduct(vector<int>& nums) {原创 2021-01-17 20:20:30 · 119 阅读 · 0 评论 -
并查集
leetcode 1202. 交换字符串中的元素class DisjointSetUnion { //并查集模板 存储了功能函数与并查集数组private: vector<int> f, rank; int n; public: DisjointSetUnion(int _n) { n = _n; rank.resize(n, 1); f.resize(n); for (int i = 0; i原创 2021-01-12 14:55:42 · 91 阅读 · 0 评论 -
深度学习基础知识总结
1.优化算法MomentumMomentum 在更新参数的时候没有直接使用当前导数,而是用的指数平均值 将历史的导数做了记录,并且当前的权重的最大的,之前的依次递减超参数设定值: 一般 γ 取值 0.9 左右。优点:可以使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。Nesterov Accelerated GradientAdagrad (Adaptive gradient algorithm)这个算法就可以对低频的参转载 2020-07-17 23:36:48 · 119 阅读 · 0 评论 -
动态规划专题——完善中
01背包问题这里主要说一下使用一维数组就是对空间进行了压缩,把时间这个维度省去了,每次都用一个数组,这也是为什么从后往前遍历背包重量的原因了 从大到小不会影响一维数组的值,否则f[j-w[i]]就可能是本i的元素的了#include <iostream>#include<vector>#include<cmath>#include<algor...原创 2020-04-13 19:08:08 · 225 阅读 · 0 评论 -
UVA 839天平——递归二叉树
UVA839 天平递归输入的数据,因而可以通过递归读入,重点在于递归的判断上,以及递归函数的传参,这里时一个引用的变量类型,通过判断底层的天平是否平衡#include<cstdio>#include<cstdlib>#include<iostream>#include<string>#include<vector>#incl...原创 2020-04-06 18:15:45 · 89 阅读 · 0 评论 -
二分查找专题
二分算法总结:转载问题一给定一个有序的数组,查找value是否在数组中,不存在返回-1。int BinarySearch(int array[], int n, int value){ int left = 0; int right = n - 1; //如果这里是int right = n 的话,那么下面有两处地方需要修改,以保证一一对应: //1、下面...转载 2020-04-02 23:16:04 · 116 阅读 · 0 评论 -
codeforce 675C
原题:http://codeforces.com/contest/675/problem/C让我们用数组a保存每个银行的余额,因为所有余额的和加起来一定为0,所以我们能把整个数组a划分为几个区间,每个区间的和都为0。对于每个区间来说,设该区间长度为l,则让该区间都为0的操作数为l-1,例如:1 、1 、-3 、1的操作数为3,也就是说,若把a分成k个区间,则a所需要的总的操作数为n-k。 ...原创 2020-04-02 21:50:52 · 263 阅读 · 0 评论