数据结构与算法
个人对某些算法的理解,以及做题心得。
sugar_coated
你即使不耀眼,依旧独一无二。
展开
-
双向链表的基本操作
我想你在看这之前已经掌握了单向链表了,如果对单向链表不是很了解,可以看看这篇文章o( ̄▽ ̄)ブ。http://www.jianshu.com/p/1b6309b6c9ab双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。节点的编写struct node {...原创 2016-06-15 22:07:08 · 70 阅读 · 0 评论 -
单链表的基本操作
按C语言代码编写节点typedef struct Student { char name[20]; //学生姓名 int num; //学号 struct Student *next;}node; //node为struct Student的别名链表的创建node *creat() { node *h...原创 2016-06-11 15:18:33 · 51 阅读 · 0 评论 -
数据的四种基本存储方法
文章目录(1)顺序存储方法(2)链接存储方法(3)索引存储方法(4)散列存储方法数据的存储结构可用以下四种基本存储方法得到:(1)顺序存储方法该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。由此得到的存储表示称为顺序存储结构 (Sequential Storage Structure ),通常借助程序语言的数组描述。该方法主要应用于线性的数据结构。非线性的数据结构也可通过某种线性化的方法实现顺序存储。(2)链接存储方法该方法不要求逻辑上相邻转载 2021-09-19 17:21:10 · 3081 阅读 · 0 评论 -
offer常考算法
文章目录01背包归并排序快速排序冒泡排序直接插入排序直接选择排序最长公共子串最长公共子序列最长上升子序列判断平衡二叉树堆排序链表的反转最大子数组和01背包题目描述:风机离升压站的距离d,如 30 20 35 40风机发电量e, 如 20 18 25 30输电总距离的限制m,如50求输送电量的最大值(38)d = [int(i) for i in input().split()]e = [int(i) for i in input().split()]m = int(input(原创 2021-06-02 18:02:12 · 247 阅读 · 0 评论 -
位运算
x & (−x) 可以获得 x的二进制表示中的最低位的1的位置x & (x−1)可以将 x的二进制表示中的最低位的1置成 0x & 1 判断x的奇偶性原创 2020-10-21 21:00:23 · 90 阅读 · 0 评论 -
卡特兰数
卡特兰数的应用:括号化问题。 矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)种)出栈次序问题。 一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?将多边行划分为三角形问题。 将一个凸多边形区域分成三角形区域的方法数? 类似:在圆上选择2n个点,将这些点成对连接起来使...原创 2017-06-01 14:52:37 · 55 阅读 · 0 评论 -
hdu2089&hdu5179(数位dp)
2089题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089题意:给你一个区间[n, m], 求在这个区间有多少个不含有不吉利数字的个数。(不吉利的数字为所有含有4或62的号码。)Input输入的都是整数对n、m(0<n≤m<1000000),如果遇到都是0的整数对,则输入结束。(如:[1, 100])Output对...原创 2016-08-14 10:55:19 · 65 阅读 · 0 评论 -
poj2358(递推 + dp)
题意:2棵苹果树在 T(1 <= T <= 1,000) 分钟内随机由某一棵苹果树掉下一个苹果,奶牛站在树1或者树2下等着接苹果(接到的苹果被牛吃了,牛不吃掉在地上的苹果),它最多愿意移动W(1 <= W <= 30)次(从一颗树移动到另一棵树),问它最多能吃到多少个苹果。默认奶牛开始在第一颗树下。Sample Input7 22112211第一列输...原创 2016-10-28 21:30:04 · 97 阅读 · 0 评论 -
hdu1026(bfs+记录路径)
题意:给定一个迷宫n*m(1<=n,m<=100),求从(0,0)到(n-1,m-1)的最短时间,并且输出最短时间的路径。其中数字‘num',表示在这个格子中有怪物,需要消耗num(1<=num<=9)秒的时间去打败它,才能继续前进。并且走一步需要消耗1秒的时间。(’X'表示不能通过这个点,‘,'表示可以通过)You may assume that the start p...原创 2016-10-22 21:36:52 · 82 阅读 · 0 评论 -
codevs2833(拓扑排序)
题目描述 DescriptionAiden陷入了一个奇怪的梦境:他被困在一个小房子中,墙上有很多按钮,还有一个屏幕,上面显示了一些信息。屏幕上说,要将所有按钮都按下才能出去,而又给出了一些信息,说明了某个按钮只能在另一个按钮按下之后才能按下,而没有被提及的按钮则可以在任何时候按下。可是Aiden发现屏幕上所给信息似乎有矛盾,请你来帮忙判断。输入描述 Input Description第...原创 2016-09-08 15:22:58 · 71 阅读 · 0 评论 -
斯特林定理的应用
最近做了杭电上的一个题hdu1018,就是求一个数的阶乘有多少位数。比如10!= 3628800,有7位数。所以,当输入10的时候就输出7。开始以为很简单,看了一下数据范围n <= 10e7就懵逼了。傻傻地在那里找规律,无果,只好狼狈的百度了。** 先看下题: **在百度途中get到了一个新知识,我们都知道由1og10(N) = X可以转换成10eX = N,那么就可以得到N的...原创 2017-04-10 15:25:05 · 133 阅读 · 0 评论 -
poj2377(最大生成树)
题意:给出点和边,求最大生成树,如果不能生成树,输出-1。Sample Input5 81 2 31 3 72 3 102 4 42 5 83 4 63 5 24 5 17Sample Output42Line 1: Two space-separated integers: N(点) and M(边)Lines 2..M+1: Each line conta...原创 2016-11-10 17:26:08 · 90 阅读 · 0 评论 -
poj1753(状态压缩 + bfs)
题意:给你一个4 x 4的正方形,共有16个格子,每个格子要么是黑色,要么是白色。当把一个格子的颜色改变(黑->白 或者 白->黑)时,其周围(上下左右)(如果存在的话)的格子的颜色也被反转,问至少反转几个格子可以使这个4 x 4的正方形变为纯白或者纯黑?如果初始状态已经达到要求输出0。如果不可能完成,就输出Impossible。Sample Inputbwwbbbwbbww...原创 2016-12-06 21:52:26 · 86 阅读 · 0 评论 -
hdu1556(线段树与BIT—区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556Problem Description:N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮...原创 2016-08-06 17:14:20 · 51 阅读 · 0 评论 -
拓扑排序的应用(hdu1285、hdu3342、hdu2647)
定义:对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。hdu1285问题描述:有N个比赛队(1<=N<=...原创 2017-04-26 20:23:08 · 112 阅读 · 0 评论 -
hdu3032(sg博弈)
对于hdu3032题描述如下:Paste_Image.pngSample Input232 2 323 3Sample OutputAliceBob如果不可以分成两堆,就是一个Nim的经典游戏。对于Nim游戏,有以下结论:a1 xor a2 xor ...xor an != 0 必胜态a1 xor a2 xor ...xor ...原创 2016-10-02 22:31:14 · 112 阅读 · 0 评论 -
横竖斜总和相等的奇数矩阵
问题描述:给定一个奇数n,将1~n * n填入n * n的矩阵中,数字不能重复,使得横竖斜的总和相等。如当n=7时:30 39 48 01 10 19 2838 47 07 09 18 27 2946 06 08 17 26 35 3705 14 16 25 34 36 4513 15 24 33 42 44 0421 23 32 41 43 03 1222 31 40 49 02...原创 2019-08-27 14:07:07 · 588 阅读 · 0 评论 -
最优二叉树
基本概念给定n个权值作为n的[叶子]结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。思路将输入的每一个叶子节点权值存入数组arr[]中,并将每一个叶子节点建成一颗树,存入数组tree[]中,因为有n个叶子节点,所以建立最优二叉树需要n-1步,每次在arr[]数组中...原创 2016-07-24 16:41:35 · 634 阅读 · 0 评论 -
poj3264(区间最值问题RMQ)
题目大意:给出一串数字,然后给出一个区间a b,输出从a到b的最大的数和最小的数的差。N(1 ≤ N ≤ 50000), Q(1 ≤ Q ≤ 200000);N为数字个数,1 ≤每个数 ≤ 1,000,000。。。如:输入:6 31734251 54 62 2输出:630解题方法:用线段树和稀疏表均可以做。线段树#include <cstdio&...原创 2016-08-05 17:22:25 · 61 阅读 · 0 评论