算法
特立独行的猪鸭
这个作者很懒,什么都没留下…
展开
-
leetcode43.在排序数组中查找元素的第一个和最后一个位置
题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶: 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? 示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target =原创 2021-04-07 22:21:01 · 124 阅读 · 0 评论 -
Trie练习
leetcode208. 实现 Trie (前缀树)题目描述实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。Trie trie = new Trie();trie.insert(“apple”);trie.search(“apple”); // 返回 truetrie.search(“app”); // 返回 falsetrie.startsWith(“app”); // 返回 truetrie.insert(“app原创 2020-12-26 19:15:01 · 109 阅读 · 0 评论 -
树状数组详解
树状数组是干什么的?一句话概括:树状数组是查询动态数组前缀和的。一般而言,对于一个值经常变化的数组,我们修改某一个值的复杂度是O(1),查询某一个前缀和是O(n),而使用树状数组,则可以做到查询和修改的复杂度均为O(logn),降了一个数量级。树状数组的结构和原理引用百度百科的图片:上图为一个树状数组的结构:下面我用A[n]A[n]A[n]表示原数组的元素,T[n]T[n]T[n]表示...原创 2020-03-30 23:24:38 · 142 阅读 · 0 评论 -
hdu 2063--匈牙利算法
匈牙利算法转载牛*博客【书本上的算法往往讲得非常复杂,我和我的朋友计划用一些简单通俗的例子来描述算法的流程】匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。-------等等,看得头大?那么请看下面的版本:通过数代人的...转载 2020-01-26 19:31:58 · 159 阅读 · 0 评论 -
HDU2044-2050~递推求解专题
HDU2044 一只小蜜蜂…问题描述有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。其中,蜂房的结构如下所示。输入输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。输出对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行...原创 2020-01-24 09:45:57 · 209 阅读 · 0 评论 -
LZW算法详解
1. LZW算法简介LZW算法又叫“串表压缩算法”就是通过建立一个字符串表,用较短的代码来表示较长的字符串来实现压缩,是一种无损压缩算法。LZW压缩有三个重要的对象:数据流(CharStream)、编码流(CodeStream)和编译表(String Table)。在编码时,数据流是输入对象(文本文件的据序列),编码流就是输出对象(经过压缩运算的编码数据);在解码时,编码流则是输入对象,数据流...原创 2020-01-04 19:34:56 · 5033 阅读 · 0 评论 -
2020考研-王道数据结构-栈和队列-栈
第三题题目简述假设以I和O分别表示入栈和出栈操作,栈的初试状态和终止状态均为空,判断序列是否合法。代码#include <iostream>#include <string>using namespace std;bool judge(string str){ int cnt = 0; for (int i = 0; i < str.size(...原创 2019-05-15 10:46:50 · 1130 阅读 · 0 评论 -
2020考研-王道数据结构-线性表-链表
注意1. 每道题目以函数的形式给出。2. 为了提高代码的可读性,STL库中的有的函数不在重复,比如Reverse、Swap、Sort等函数。3. 语言采用的是C++11标准,所以大家编译调试的需要注意,某些函数C++98的编译器不支持。4. 数据结构、元素定义、相关辅助函数请看以下定义。typedef int ElemType;typedef struct Node{ ElemTy...原创 2019-05-12 23:29:16 · 965 阅读 · 0 评论 -
2020考研-王道数据结构-树和二叉树-树和森林
头文件定义#include <iostream>#include <string>#include <vector>#include <algorithm>#include <queue>数据结构定义typedef char ElemType;typedef struct CSNode // 孩子兄弟表示法的树{ ...原创 2019-06-06 22:37:23 · 992 阅读 · 0 评论 -
2020考研-王道数据结构-树和二叉树-二叉树的遍历
说在开头函数头文件定义#include <iostream>#include <string>#include <queue>#include <algorithm>#include <stack>数据结构定义typedef struct bitnode{ ElemType data; struct bitnode ...原创 2019-06-02 22:22:38 · 1611 阅读 · 0 评论 -
2020考研-王道数据结构-树和二叉树-树与二叉树的应用
说在开头下面给出的是函数,具体的可执行程序,会在这一系列的所有博客完结后上传到CSDN。函数也是可执行的程序,对于这一章的建树的程序没有贴上,是因为和前面的博客【二叉树的遍历】中的建树程序是一样的,需要的话,大家可以自行去参考。头文件定义#include <iostream>#include <algorithm>#include <string>...原创 2019-06-08 22:41:11 · 1299 阅读 · 2 评论 -
线索二叉树
什么是线索二叉树?遍历二叉树是以一定的规则将二叉树中的结点排列成一个线性序列,从而等到二叉树的各种遍历序列,其实质是对一个非线性操作进行线性化操作,使这个访问序列中的每一个结点(去除第一个和最后一个)都有一个之直接前驱和直接后继。我们发现在二叉链表表示的二叉树中存在大量的空指针,若利用这些空指针存放指向其直接前驱和直接后继的节点,那么可以更方便的运用某些二叉树操作算法。为什么要引入线索二叉树...原创 2019-06-03 13:33:49 · 611 阅读 · 2 评论 -
2020考研-王道数据结构-图-图的遍历
说在开头某些语法采用的是c11标准。博客中中的代码均为可执行程序,以函数的形式给出,最后所有的程序会在博客完结后上传到CSDN。头文件定义#include <iostream>#include <algorithm>#include <vector>#include <stack>#include <queue>数...原创 2019-06-16 10:20:29 · 1804 阅读 · 0 评论 -
2020考研-王道数据结构-线性表-顺序表
注意1. 每道题目以函数的形式给出。函数接口见详细注释。2. 为了提高代码的可读性,STL库中的有的函数不在重复,比如Reverse、Swap、Sort等函数。3. 语言采用的是C++11标准,所以大家编译调试的需要注意,某些函数C++98的编译器不支持。4. 关于第一张线性表的题目比较简单,数据结构全部采用数组进行模拟。第八题题目简介:将线性表中的前m个元素与线性表中后 n-m 个...原创 2019-05-07 16:01:32 · 2546 阅读 · 0 评论 -
2020考研-王道数据结构-栈和队列-队列
第一题题目简述实现一个循环队列,能充分利用空间内的元素。代码#include <iostream>#include <algorithm>#include <ctime>using namespace std;#define MAXSIZE 10typedef int Elemtype;class Queue{private: El...原创 2019-05-18 23:09:07 · 883 阅读 · 0 评论 -
二分题目总结
1. 二分模板当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。int bsearch_1(int l, int r){ while (l < r) { int mid = l + r >> 1; if (check(...原创 2019-04-23 22:02:58 · 1224 阅读 · 0 评论 -
Hdu-1261 字串数
Problem Description一个A和两个B一共可以组成三种字符串:“ABB”,“BAB”,“BBA”.给定若干字母和它们相应的个数,计算一共可以组成多少个不同的字符串.Input每组测试数据分两行,第一行为n(1&lt;=n&lt;=26),表示不同字母的个数,第二行为n个数A1,A2,…,An(1&lt;=Ai&lt;=12),表示每种字母的个数.测试数据以n=0为结束.Ou...原创 2019-01-01 16:58:03 · 2154 阅读 · 1 评论 -
JAVA - 四柱汉诺塔最优移动次序展示
本文是初学JAVA的自己做的一个小程序,关于面向对象的思想掌握的还不是很好,还没完全从c++过渡过来,尽情各位看官大佬批评指正。各个类的功能和函数注释的很详细了就不详解了。各类源代码下载链接:https://download.csdn.net/download/qq_40285036/10841684运行截图:主类/* * 主函数 * * 包含了各个类之间的逻辑控制 */p...原创 2019-01-18 09:48:14 · 1462 阅读 · 4 评论 -
逆序对 - 超快速排序
在这个问题中,您必须分析特定的排序算法----超快速排序。该算法通过交换两个相邻的序列元素来处理n个不同整数的序列,直到序列按升序排序。对于输入序列9 1 0 5 4,超快速排序生成输出0 1 4 5 9。您的任务是确定超快速排序需要执行多少交换操作才能对给定的输入序列进行排序。输入格式输入包括一些测试用例。每个测试用例的第一行输入整数n,代表该用例中输入序列的长度。接下来n行每行输...原创 2019-02-14 19:04:58 · 1217 阅读 · 0 评论 -
最短Hamilton路径
给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。输入格式第一行输入整数n。接下来 n 行每行n个整数,其中第i行第j个整数表示点i到j的距离(记为a[i,j])。对于任意的x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a...原创 2019-02-06 14:23:07 · 4930 阅读 · 0 评论 -
激光炸弹 - 前缀和
一种新型的激光炸弹,可以摧毁一个边长为 R 的正方形内的所有的目标。现在地图上有 N 个目标,用整数Xi,Yi表示目标在地图上的位置,每个目标都有一个价值Wi。激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个边长为 R 的正方形的边必须和x,y轴平行。若目标位于爆破正方形的边上,该目标不会被摧毁。求一颗炸弹最多能炸掉地图上总价值为多少的目标。输入格式第一行输入正整...原创 2019-02-06 15:56:57 · 598 阅读 · 0 评论 -
最佳牛围栏 - 二分
农夫约翰的农场由 N 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头。约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。围起区域内至少需要包含 F 块地,其中 F 会在输入中给出。在给定条件下,计算围起区域内每块地包含的牛的数量的平均值可能的最大值是多少。输入格式第一行输入整数 N 和 F ,数据间用空格隔开...原创 2019-02-09 17:21:43 · 563 阅读 · 0 评论 -
经典位运算-- a^b%p 和 64位乘法
1. 求 a 的 b 次方对 p 取模的值。输入格式三个整数 a,b,p ,在同一行用空格隔开。输出格式输出一个整数,表示a^b mod p的值。数据范围1≤a,b,p≤10^9时/空限制: 1s / 32MB输入样例:3 2 7输出样例:2解题思路:按照我们正常的思路去想就是a一共累乘b次,这样做的时间复杂度是O(b), 但是这个问题是可以优化到 lg(b) 级别的。下...原创 2019-02-10 10:00:53 · 1575 阅读 · 1 评论 -
堆排序
下面这篇文章主要是记录一下堆排序的程序实现。堆的定义:堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆的性质:在堆的数据结构中,堆中的最大值(最小值)总是位于根节点(在优先队列中使用堆的话堆中的最小值位于根节点)。堆的操作:下面的代码均为构造大根堆的代码...原创 2019-02-11 22:03:05 · 732 阅读 · 0 评论 -
中位数应用-货仓选址-纸牌均分-糖果传递-七夕祭
1. 货仓选址描述在一条数轴上有N家商店,它们的坐标分别为 A[1]~A[N]。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。输入格式第一行一个整数N,第二行N个整数A[1]~A[N]。输出格式一个整数,表示距离之和的最小值。样例输入46 2 9 1样例输出12数据范围与约定...原创 2019-02-14 14:17:03 · 1065 阅读 · 0 评论 -
Hdu-2064 汉诺塔III
1. 问题描述约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。现在我们改变游戏的玩法,不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到下盘的上面。Daisy已经做过原来...原创 2019-03-10 10:36:05 · 285 阅读 · 0 评论 -
最小生成树的两个经典算法 - Prim算法 和 Kruskal算法
一、Prim,Kruskal算法简介这两个最小生成树的算法思路都比较容易理解,下面给大家说一下我对这两个算法的理解和相关的代码实现,也是给自己以后温习最小生成树算法的时候有个参考的例子。1. Kruskal 算法对于上面的无向图B来说,克鲁斯卡尔算法的思路是假设起初各个点之间没有边相连,只有A~G这7个点,然后我按照边的权重从小到大排序,依次把边加入,如果当前边加入后不会构成环,那么当前边...原创 2019-03-17 00:02:14 · 2166 阅读 · 0 评论 -
逛画展
1. 题目简介 博览馆正在展出由世上最佳的 M 位画家所画的图画。wangjy想到博览馆去看这几位大师的作品。可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字,a和b,代表他要看展览中的第 a 幅至第 b...原创 2019-04-23 15:54:37 · 599 阅读 · 0 评论 -
C++标准库中next_permutation和pre_permutation实现原理
原文链接:https://blog.csdn.net/yang20141109/article/details/51333417标准库中next_permutation函数:找当前序列中元素排列的下一个排列,按照字典顺序进行排列。比如说数组排列"123",那么它的下一个排列为"132",并且返回true。如果当前序列没有下一个排列,我们返回false,且把当前排列置为最小的排列,比如...转载 2018-11-28 19:47:16 · 1212 阅读 · 0 评论