
数据结构和算法
zzti_bsj
没有可以抵达的巅峰
展开
-
牛客网 - 华为笔试题 - 循环链表
代码#include<stdio.h>struct Node{ // 整数 int number; struct Node *next;};int main(){ int n; // 输入N while(scanf("%d", &n)!=EOF){ // 代码的鲁棒性 if(n > 1000){ n = 1000; } // 定义一个循环.原创 2021-01-29 17:42:25 · 230 阅读 · 0 评论 -
蓝桥杯 日志统计
日志统计#尺取法#vector容器#全局变量能开更大的空间哦~题目小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:ts id表示在ts时刻编号id的帖子收到一个"赞"。现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。具体来说,如果存在某个时刻T满足该帖在...原创 2019-03-20 21:32:44 · 434 阅读 · 0 评论 -
2017蓝桥杯c/c++B组 k倍区间
k倍区间#一个10000的数组,求任意区间的和。#原理很简单,想到了就解决了。#大佬的解法,这波操作很骚题目标题: k倍区间给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i &lt;= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。你能求出数列中总共有多少个K倍区间吗?输入第一行包含两个整数N和K。(1 &...原创 2019-03-15 20:23:59 · 468 阅读 · 0 评论 -
第八届蓝桥杯c/c++B组 分巧克力
分巧克力#二分求值#二分是一个有意思的东西标题: 分巧克力儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:形状是正方形,边长是整数大小相同例如一块6x5的巧克力可以切出6块2x2的巧克力或者...原创 2019-03-15 20:19:18 · 728 阅读 · 2 评论 -
2017蓝桥杯c/c++B组 包子凑数
包子凑数#扩展欧几里得#待证这个题重点在于扩展欧几里得记着这个结论吧:如果所有书的公约数为1,则凑不出来的包子数是有限的,否则,凑不出来的包子数是无限的。包子凑数标题:包子凑数小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使...原创 2019-03-15 20:12:54 · 808 阅读 · 3 评论 -
扩展欧几里得(待深入理解)
扩展欧几里得扩展欧几里得:已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),使它们满足贝祖等式 ax+by=gcd(a,b);#对于给定的一个a,b必然存在x,y使得ax+by=gcd(a,b);扩展欧几里得,其实实际上是欧几里得算法的一个扩展。扩展欧几里得算法可以用来计算模反元素(也叫模逆元)代码实现:int gcd(i...原创 2019-03-14 19:56:26 · 302 阅读 · 1 评论 -
一段简单的代码,诠释了欧几里得的意义
欧几里得算法总所周知,欧几里得算法可用来求解两个数a,b的最大公约数。其实质上就是辗转相除法来求解两数的最大公约数。代码实现:int gcd(int a,int b){ return b?gcd(b,a%b):a;}一段简单的代码,诠释了欧几里得的意义,perfect!...原创 2019-03-14 16:34:54 · 235 阅读 · 0 评论 -
单元最短路径_dijkstra算法
单元最短路径指定一个源点到其余各个顶点的最短距离。dijkstra算法1 指定一个源点x,使初始值的距离为其他点到源点x的距离。for(int i=1;i<=n;i++) dis[i]=e[i][x];2 遍历所有未标记的点,每次找一个离源点最近的点,标记。3 遍历所有点,找到该点的出边所连接的为标记的点,进行松弛操纵执行完之后dis数组中存放的就是到每个点到源点的最短距离。...原创 2019-03-10 15:54:21 · 1012 阅读 · 0 评论 -
最小生成树
什么是树?树:由边和点组成,n个点,以n-1条边使任意两个点连通。(无回路的连通图)什么是最小生成树?给定一个有回路的连通无向图,有n个点,m条边(m&amp;amp;amp;gt;n),每条边都有一个花费值,在此有回路的连通图中,找到一个连通所有点且花费最小的树。求解最小生成树的方法一、Kruskal算法(选边)Kruskal算法:首先按照边的权值进行升序排序,每次从剩余的边中选择权值最小且两点不连通的边...原创 2019-03-10 12:05:29 · 168 阅读 · 0 评论 -
算法训练 表达式求值
表达式求值#中缀表达式、后缀表达式#表达式求值之后缀表达式的应用(不允许输入负数)具体分为两步,第一步求后缀表达式,第二部是利用后缀表达式求解。前言表达式求值也有一种思路清晰的算法,但是有个前提,就是输入的数据中,不能有负数。我最讨厌这种字符串来计算有关数学运算的问题了,需要在短时间内考虑太多的情况,做不好的话,容易产生挫败感。字符串的问题,掌握一定的算法和基础,在实际的问题中还是要...原创 2019-03-10 00:16:54 · 515 阅读 · 2 评论 -
KMP算法
KMP算法kmp算法是字符串匹配算法,在主串T 中找相应的与模式串P匹配的字串,并返回匹配成功的第一个字符的下标。介绍几个概念char s[20]="hello";1 某串前缀集合:如,s的前缀为{h, he, hel, hell},不包含最后一个字符2 某串后缀集合:如,s的后缀为{ello, llo, lo, o},不包含第一个字符3 PMT(Partial Match Table...原创 2019-03-07 01:20:07 · 356 阅读 · 0 评论 -
二分查找之 upper_bound 和 lower_bound函数
upper_bound()和lower_bound()#二分查找+返回指针两个函数相似,都是在一个左闭右开的区间内进行二分查找,其使用的前提是这个左闭右开的区间的值的顺序是非递减的。upper_bound() //返回第一个大于查找值的指针lower_bound() //返回第一个第一个大于等于查找值的指针,(从某些意义上讲,可以使用它寻找第一个小于查找值的指针,如果存在,其返回值为当前返...原创 2019-03-05 23:03:33 · 393 阅读 · 0 评论 -
一篇总结,带你学习STL在acm中常用的容器及其方法
vector容器类声明:因为是在acm编程的基础上使用,我就自己总结了一些常用的方法,并不能用来系统的学习stl的vector。#容器类+函数创建vector对象vector&amp;amp;amp;amp;amp;amp;amp;lt;int&amp;amp;amp;amp;amp;amp;amp;gt; a; //创建一个int类型的vector对象,a本身就能做为一个数组的名称vector&amp;amp;amp;amp;amp;am原创 2019-03-05 15:56:05 · 463 阅读 · 0 评论 -
记忆化搜索概述
记忆化搜索概念记忆化搜索(search),算法上依然是搜索,但具有dp的性质。记忆化搜索综合了搜索和dp的特点。记忆化搜索概念:记忆化搜索按自顶向下的顺序求解,每求解一个状态,将它的解保存下来 (根据得到的求解的状态方程,保证了每求的一个解都是当前最优的),再次遇到这种状态的时候,直接返回这种状态的解,不必再重新求解。(搜索可以剪去一些不必要的状态,动态规划有最优思想,记忆化搜索综合两...原创 2019-03-04 15:39:36 · 468 阅读 · 0 评论 -
poj1088滑雪
滑雪#题型+分析+代码题型#记忆化搜索分析代码代码1#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;string.h&amp;gt;int l=0;int max_(int a,int b){ return a&amp;gt;b?a:b;}int dfs(int x,int y,int r,int c,int a[][原创 2019-03-04 10:10:49 · 185 阅读 · 0 评论 -
十六进制转八进制(浅显易懂)
十六进制转八进制#分析+算法实现+代码+测试数据#技巧:分析+处理+调试(大不了就调试)分析这个题是蓝桥杯的一道练习题,对于十六进制转八进制的话,是可以通用的。题目的描述大概是这样的:给n个十六进制数,n&amp;lt;=10,每个数的长度不超过10000。这里涉及到字符型以及string类类类型,待会再强调。下面分析一下此题:要想把十六进制转成八进制,首先想到把十六进制转成二进制再转成...原创 2019-03-02 13:09:57 · 16165 阅读 · 14 评论 -
再论qsort和sort函数
qsort函数代码上一篇qsort中已经贴了一个代码实例。不再赘述。qsort和sort时间效率的对比qsort比sort更快一点?网上那么多人认为sort比qsort还要快,但是实际运算的时候,的确显示的运算中qsort更快一点啊。建议使用qsort函数,在我个人没有得到理论证实的情况下,在实际解决问题的情况下qsort的确比sort快!qsort和sort参数的对比qsort的参...原创 2019-03-01 18:36:37 · 273 阅读 · 0 评论 -
qsort()函数排序实例
qsort函数实例#分析+代码+测试数据分析qsort在c++的algorithm头文件中,注意其参数的使用。比如// 数在数组num[210]中的范围是闭区间 [0,n-1] 或者[1,n]//对应的第一个参数num,第二个参数是n。对应的第一个参数是num+1,第二个参数是n+1.//第三个参数写成sizeof(num[0]),数组每个元素的空间大小。//第四个参数是自定义cmp...原创 2019-02-28 18:30:20 · 307 阅读 · 0 评论 -
快速排序
快速排序#排序+二分思想#分析+代码简而言之,就是快速的排序,为什么说它是快速排序呢?因为它相比于其他排序综合来说是使用最多的一个排序,在c++中有一个qsort排序函数,即quicksort,快排的时间复杂度是O(N*logN)。问题描述如下:N是数的个数,N=10000,最大整数的范围接近int的最大值,如何排序?分析:如果使用冒泡排序的话,时间复杂度为O(N * N),运算次数大概...原创 2019-02-28 18:11:52 · 251 阅读 · 0 评论 -
完全背包
完全背包#问题+分析+代码问题有一个承重为W的背包,有n种物品,每种物品有无限个,可知每种物品的重量w,价格p,问如何装入物品使其总价值最大?分析其实,最后可以得出结论,完全背包和0-1背包的状态方程是一样的,但是完全背包重量的for循环是正序[w[i],W],而0-1背包的重量for循环是倒序[W,w[i]],那么它们的正序和倒序的区别是什么呢?给出一组输入数据5 102 66...原创 2019-02-27 00:04:31 · 796 阅读 · 0 评论 -
多重背包问题
多重背包问题#问题+代码+测试数据问题有一个承重为W的背包,有n种物品,可知每种物品的重量w,价值p,以及个数c,求如何装入背包使其拥有最大价值?代码多重背包代码#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int max_(int a,in...原创 2019-02-26 23:11:10 · 632 阅读 · 0 评论 -
动态规划概述
动态规划思想动态规划概念:(dynamic programming)求解决策过程最优化的数学方法动态规划思想:把多阶段过程转化成一系列单阶段问题,利用各阶段之间的关系,逐个求解动态规划分类:线性动规 区域动规 树型动规 背包动规动态规划的基本解题思路:以时间划分阶段,分成子问题,使其拥有最优化子结构。(简而言之,对于原问题,它的一个最优策略的子策略总是最优的,称为其满足...原创 2019-02-26 17:09:36 · 158 阅读 · 0 评论 -
经典的0-1背包问题
经典的0-1背包问题-滚动数组优化背包问题是一个经典的问题,除此之外还有其扩展的变形。下面,我们把背包问题仅仅当做一个问题来解决,而不太多的去思考动态规划这个笼统的概念。下面我会把这个经典的最原始的背包问题的算法思路详细的表述出来,并从二维数组到一维数组优化(空间优化)注:(二维数组到一维数组的空间优化方案简称为滚动数组。)注:(首先,要大致了解解决背包问题的动态规划思想,但是懂得解决背...原创 2019-02-25 20:55:35 · 987 阅读 · 0 评论 -
冒泡排序
冒泡排序冒泡排序数组的下标从0开始假如有n个数(i,j下标从0开始)外层循环,循环(n-1次)每次从零循环,每次循环(n-1-i次)输入输入无序的十个数2 5 7 8 9 6 4 1 3 10输出升序1 2 3 4 5 6 7 8 9 10#include <iostream>#include<stdio.h>using namespace ...原创 2020-01-05 23:03:34 · 162 阅读 · 0 评论