数据结构与算法
WUST_XIAO
这个作者很懒,什么都没留下…
展开
-
LeetCode题库 2.两数相加
题目描述给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 ->...原创 2019-08-25 04:14:34 · 152 阅读 · 0 评论 -
深度优先搜索专题(二)-【递归入门】组合的输出
深度优先搜索专题(二)-【递归入门】组合的输出待更新…原创 2019-03-01 21:15:07 · 278 阅读 · 0 评论 -
深度优先搜索专题(一)-【递归入门】全排列
深度优先搜索专题(一)-【递归入门】全排列待更新…原创 2019-03-01 21:13:55 · 251 阅读 · 0 评论 -
树状数组专题(四)-数列-训练套题T10T3
树状数组专题(四)-数列-训练套题T10T3待更新…原创 2019-03-01 21:12:30 · 260 阅读 · 0 评论 -
树状数组专题(三)-Count Inversions
树状数组专题(三)-Count Inversions待更新…原创 2019-03-01 21:11:07 · 295 阅读 · 0 评论 -
动态规划-最长回文子串
动态规划-最长回文子串题目描述给出一个字符串S,求S的最长回文子串的长度样例:字符串"PATZJUJZTACCBCC"的最长回文子串为"ATZJUJZTA",长度为9。动态规划思想令dp[i][j]表示S[i]至S[j]所表示的子串是否是回文子串,是则为1,不是为0。这样根据S[i]是否等于S[j],可以把转移情况分为两类:若S[i] == S[j],那么只要S[i+1...原创 2019-02-26 09:09:04 · 223 阅读 · 1 评论 -
树状数组专题(二)-区间查询(单点更新,区间查询)
树状数组专题(二)-区间查询算法思想:单点更新,区间查询代码如下:#include <iostream>#include <cstdio>#include <cstring>#include <string>using namespace std;const int maxn = 30000+5;int c[原创 2019-03-01 19:46:59 · 134 阅读 · 0 评论 -
树状数组专题(一)-最少的交换(树状数组,离散化,逆序数)
树状数组专题(一)-最少的交换(树状数组,离散化,逆序数)算法思路:求逆序数的和如果说只是交换相邻的两个数字。那么就是这个序列的逆序数假设序列个数为n,我们先把最大的数换到最后,因为是相邻数字交换,所以把最大数交换到最后,需要交换的次数为最大数后的数字个数。当完成最大数的交换后,可以将最大数从序列中划去不管了,即此时序列个数为n-1了,我们再在该序列中找到一个最大数,进行...原创 2019-03-01 19:12:43 · 361 阅读 · 0 评论 -
动态规划-最长公共子序列 (LCS)
动态规划-最长公共子序列 (LCS)题目描述:给定两个字符串(或数字序列)A和B,求一个字符串,使得这个字符串是A和B的最长公共部分(子序列可以不连续)。如样例所示,字符串"sadstory"与"adminsorry"的最长公共子序列为"adsory",长度为6动态规划的解法令dp[i][j]表示字符串A的i号位和字符串B的j号位之前的LCS长度(下标从1开始),如dp[4]...原创 2019-02-25 20:59:14 · 292 阅读 · 0 评论 -
PAT(甲级)渡劫(二十)-Are They Equal(25)
PAT(甲级)渡劫(二十)-Are They Equal(25)代码如下:#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 200;char s1[maxn],s2[maxn];int n;void sol...原创 2019-02-19 21:03:43 · 110 阅读 · 0 评论 -
PAT(甲级)渡劫(十九)-Prime Factors(25)
PAT(甲级)渡劫(十九)-Prime Factors(25)代码如下:#include <iostream>#include <cstdio>#include <cmath>const int maxn = 60000;bool mark[maxn];int prime[maxn];int primeSize = 0;void ini...原创 2019-02-19 19:30:56 · 122 阅读 · 0 评论 -
树状数组最经典的应用
树状数组最经典的应用树状数组的理解更简单一点的理解请参考《算法笔记》-树状数组(BIT) 相关章节树状数组的模板int lowbit(int x){ return x&amp;amp;-x;}int getSum(x){ int sum = 0; for(int i = x ; i &amp;gt; 0 ; i-=lowbit(i)){ sum += C[...原创 2019-02-28 20:53:20 · 277 阅读 · 0 评论 -
PAT(甲级)渡劫(十八)-A+B in Hogwarts(20)
PAT(甲级)渡劫(十八)-A+B in Hogwarts(20)代码如下:#include <iostream>#include <cstdio>#include <bits/stdc++.h>using namespace std;int main(){ //freopen("in.txt","r",stdin); cha...原创 2019-02-19 16:37:13 · 129 阅读 · 0 评论 -
PAT(甲级)渡劫(一)-Public Bike Management
### PAT(甲级)渡劫(一)-Public Bike Management#### 题目描述:&amp;amp;amp;amp;gt; There is a public bike service in Hangzhou City which provides great convience to the tourists原创 2019-02-13 21:47:31 · 185 阅读 · 0 评论 -
PAT(甲级)渡劫(十七)-Stack(30)
PAT(甲级)渡劫(十七)-Stack(30)题目大意:题意:有三种操作,分别是1.Push key:将key压入stack2.Pop:将栈顶元素取出栈3.PeekMedian:返回stack中第(n+1)/2个小的数(中位数)算法思想:分桶法的基本思路是分治,在一开始的暴力解法中,我们可以认为Count数组是一个大的桶,这个大的桶里有510^5个小桶,每个小桶能装一个数,在分...原创 2019-02-19 13:50:02 · 146 阅读 · 0 评论 -
动态规划-DAG最长路
动态规划-DAG最长路DAG就是有向无环图,并且在之前已经讨论了如何求解DAG中的最长路,也就是所谓的”关键路径“。但是求解关键路径的做法对初学者来说确实有些复杂,而DAG上的最长路或者最短路问题又是特别重要的一类问题,很多问题都可以转换成求解DAG上的最长或最短路径问题,因此有必要介绍一下更简便的方法,也就是使用本节介绍的方法。由于DAG最长路和最短路的思想是一致的,因此下面以最长路为例。本...原创 2019-02-26 11:30:08 · 1981 阅读 · 0 评论 -
PAT(甲级)渡劫(二十一)-Set Similarity(25)
PAT(甲级)渡劫(二十一)-Set Similarity(25)代码如下:#include <iostream>#include <cstdio>#include <set>#include <vector>using namespace std;vector<set<int> > v; // 集...原创 2019-02-20 21:00:48 · 140 阅读 · 0 评论 -
LeetCode题库 1.两数之和
题目描述英文版Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use...原创 2019-08-25 03:30:14 · 217 阅读 · 0 评论 -
KMP算法初体验
字符串的模式匹配算法 子串的定位操作通常称作串的模式匹配(其中T称为模式串),是各种串处理系统中最重要的操作之一。下面给出字符串模式匹配的一般算法int Index(SString S,SString T,int pos){ //返回子串T在主串中第pos个字符之后的位置。若不存在,则函数值为0 //其中,T非空,1 <= pos <= StrLength(S)原创 2016-11-05 11:43:01 · 240 阅读 · 0 评论 -
查找算法
普通的查找算法int find(int array[],int length,int value){ if(NULL == array || 0 == length) return -1; for(int index = 0;index < length; index++) { if(value == array[index]...原创 2018-03-15 21:26:23 · 139 阅读 · 0 评论 -
LeetCode-TwoSum(easy)-for Java,C++,Python-Day01
题目Given an array of integers, find two numbers such that they add up to a specific target number.The function twoSum should return indices of the two numbers such that they add up to the targe...原创 2018-04-07 16:18:02 · 202 阅读 · 0 评论 -
并查集学习
并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,HDU1232畅通工程首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你...原创 2019-01-15 16:13:57 · 157 阅读 · 2 评论 -
区间贪心
区间贪心问题描述给出N个开区间(x,y),从中选择尽可能多的开区间,使得这些开区间两两没有交集策略总是先选择左端点最大的区间代码如下:#include <cstdio>#include <algorithm>using namespace std;const int maxn = 110;struct Inteval{ int x,y; ...原创 2019-03-25 23:23:27 · 296 阅读 · 0 评论 -
探索字节跳动(一)-无重复字符的最长子串
探索字节跳动(一)-无重复字符的最长子串算法一:很容易想到以下这个算法import java.util.HashSet;public class Solution{ public int lengthOfLongestSubstring(String s){ int n = s.length(); int ans = 0; for(...原创 2019-03-21 20:57:23 · 211 阅读 · 0 评论 -
递归问题-全排列问题和八皇后问题
递归问题-全排列问题和八皇后问题不使用库函数实现全排列#include <cstdio>using namespace std;const int maxn = 11;int n,p[maxn],hashTable[maxn] = {false};void generateP(int index){ if(index == n+1){ fo...原创 2019-03-21 19:15:00 · 176 阅读 · 0 评论 -
散列表-(将字符串散列为整数)
散列表-(将字符串散列为整数)题目如下:给出N个字符串(由恰好3位大写字母组成),再给出M个查询字符串,问每个查询字符串在N个字符串中出现的次数。代码如下:#include <cstdio>const int maxn = 100;char S[maxn][5],temp[5];int hashTable[26*26*26+10];int hashFunc(char S[...原创 2019-03-14 20:58:31 · 596 阅读 · 0 评论 -
PAT(甲级)渡劫(二十八)-PAT Ranking
PAT(甲级)渡劫(二十六)-PAT Ranking题目大意:有n个考场,每个考场有若干数量的考生。现在给出各个考场中考生的准考证号与分数,要求将所有考生按分数从高到低排序,并按顺序输出所有考生的准考证号,排名,考场号以及考场内排名。很多排序题都会要求在排序之后计算出每个个体的排名,并且规则一般是:分数不同的排名不同,分数相同的排名相同但占用一个排位。对这种要求,一般需要在结构体类型定义...原创 2019-03-14 19:59:15 · 204 阅读 · 0 评论 -
动态规划-完全背包问题
动态规划-完全背包问题完全背包问题的叙述如下:有n种物品,每种物品的单件重量为w[i],价值为c[i]。现有一个容量为V的背包,问如何选取物品放入背包,使得背包内物品的总价值最大。其中每种物品都有无穷件。动态规划思想同样令dp[i][v]表示前i件物品恰好放入容量为v的背包中能获得的最大价值。和01背包一样,完全背包问题的每种物品都有两种策略,但是也有不同点。对第i件物品来说:...原创 2019-02-26 20:51:15 · 9331 阅读 · 4 评论 -
动态规划-01背包问题
动态规划-01背包问题背包问题是一类经典的动态规划问题,它非常灵活,变化多样,需要仔细体会。本书只介绍两类最简单的背包问题:01背包问题和完全背包问题,而这两种背包中,又以01背包为重。多阶段动态规划问题有一类动态规划可解的问题,它可以描述成若干个有序的阶段,且每个阶段的状态只和上一个阶段的状态有关,一般把这类问题称为多阶段动态规划问题。01背包问题就是这样一个例子。01背包问题...原创 2019-02-26 16:53:00 · 470 阅读 · 0 评论 -
PAT(甲级)渡劫(二十四)-Root of AVL Tree (25)
PAT(甲级)渡劫(二十三)-Root of AVL Tree (25)代码如下:#include &lt;iostream&gt;#include &lt;cstdio&gt;#include &lt;cmath&gt;using namespace std;struct TreeNode{ int val; TreeNode *left,*right; ...原创 2019-02-20 23:16:09 · 139 阅读 · 0 评论 -
PAT(甲级)渡劫(二十三)-A+B and C (64bit) (20)
PAT(甲级)渡劫(二十三)-A+B and C (64bit) (20)算法思想:因为A、B、C的大小为[-2^63, 2^63],用long long 存储他们的值和sum。接下来就是分类讨论:如果A > 0, B < 0 或者 A < 0, B > 0,sum不会溢出,直接和C判断比较即可。如果A > 0, B > 0,sum可能会溢出, 溢...原创 2019-02-20 22:20:41 · 130 阅读 · 0 评论 -
PAT(甲级)渡劫(二十二)-Complete Binary Search Tree(30)
PAT(甲级)渡劫(二十二)-Complete Binary Search Tree(30)代码如下:#include &lt;iostream&gt;#include &lt;cstdio&gt;#include &lt;vector&gt;#include &lt;algorithm&gt;using namespace std;vector&原创 2019-02-20 21:50:59 · 122 阅读 · 0 评论 -
PAT(甲级)渡劫(十六)-Mice and Rice(30)
PAT(甲级)渡劫(十六)-Mice and Rice(30)题目大意:题目意思是:n个人,每人手中拿着一个数字,然后按照k人一组进行比赛,谁的数大谁就赢,最后输出他们的排名输入说明:第一行是n,k,分别代表参赛人数和一个组的最大人数第二行是n个数据,比如这里,就是从0到10号参赛选手的手中的数字第三行是n个参赛选手的顺序,分组就是依据此来划分详细说明:11 3 //1...原创 2019-02-18 22:59:33 · 148 阅读 · 0 评论 -
PAT(甲级)渡劫(十五)-Graduate Admission(30)
PAT(甲级)渡劫(十五)-Graduate Admission(30)代码如下:#include <iostream>#include <cstdio>#include <algorithm>#include <vector>using namespace std;const int maxn = 40005;const ...原创 2019-02-18 21:59:32 · 175 阅读 · 0 评论 -
PAT(甲级)渡劫(六)-Cars on Campus(30)
PAT(甲级)渡劫(六)-Cars on Campus(30)题目大意:题意:给出n个车辆进出校园的记录,以及k个时间点,让你回答每个时间点校园内的车辆数,最后输出在校园内停留的总时间最长的车牌号和停留时间,如果不止一个,车牌号按字典序输出。几个注意点:1.如果一个车连续多次进入,只取最后一个2.如果一个车连续多次出去,只取第一个3.一个车可能出入校园内好几次,停留时间取总和...原创 2019-02-16 20:41:18 · 258 阅读 · 0 评论 -
PAT(甲级)渡劫(二十五)-Sort with Swap(0,*) (25)
PAT(甲级)渡劫(二十五)-Sort with Swap(0,*) (25)算法思想:贪心算法次数最少的方法,即:1.每次都将0与应该放置在0位置的数字交换即可。2.如果0处在自己位置上,那么随便与一个不处在自己位置上的数交换,重复上一步即可。拿样例举例:0 1 2 3 4 5 6 7 8 90:3 5 7 2 6 4 9 0 8 11:3 5 0 2 6 4 9 7 8 ...原创 2019-02-22 10:35:13 · 138 阅读 · 0 评论 -
PAT(甲级)渡劫(五)-The Largest Generation (25)
PAT(甲级)渡劫(五)-The Largest Generation (25)题目大意:就是统计一下每层的节点数,输出节点数最多的个数和对应的层数即可。算法思想:采用层次遍历代码如下:#include <iostream>#include <cstdio>#include <cstring>#include <queue>...原创 2019-02-16 17:16:49 · 118 阅读 · 0 评论 -
PAT(甲级)渡劫(四)-Acute Stroke(30)
PAT(甲级)渡劫(四)-Acute Stroke(30)题目大意:给定三维数组,0表示正常,1表示有肿瘤块,肿瘤块的区域>=t才算是肿瘤,求所有肿瘤块的体积和算法思想:这道题一开始就想到了dfs或者bfs,但当时看数据量挺大的,以为会导致栈溢出,所以并没有立刻写,想有没有别的办法。然而结果是,实在想不出别的办法了,所以还是尝试写写dfs、bfs。一开始先用了dfs,最后...原创 2019-02-16 14:07:45 · 135 阅读 · 0 评论 -
数据结构与算法-搜索(一)-广度优先搜索
数据结构与算法-搜索(一)-广度优先搜索首先需要说明,这里所说的广度优先搜索,与利用广度优先搜索对图进行遍历有一定的差别。广度优先搜索确实可以以被应用在图的遍历当中,但其应用远不仅如此。我们通过一个例题,引出广度优先搜索:例:胜利大逃亡题目描述:Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会,魔王住在一个城堡里,城堡是一个A * B * C 的立方体,...原创 2019-02-09 22:15:55 · 189 阅读 · 0 评论 -
数据结构与算法-图论(四)-拓扑排序
数据结构与算法-图论(四)-拓扑排序设有一个有向无环图(DAG图),对其进行拓扑排序即求其中结点的一个拓扑序列,对于所有的有向边(U,V)(由U指向V),在该序列中结点U都排列在结点V之前。满足该要求的结点序列,被称为满足拓扑次序的序列。求这个序列的过程,被称为拓扑排序。拓扑排序的方法首先,所有有入度(即以该结点为弧头的弧的个数)的结点均不可能排在第一个。那么选择一个入度为0的结点,作为序列...原创 2019-02-09 17:29:18 · 1226 阅读 · 0 评论