数据结构
文章平均质量分 77
桂月二四
这个作者很懒,什么都没留下…
展开
-
子串计数问题
定义子串的定义:将一个字符串从开头与结尾删去任意字符,形成新的字符串,称为原字符串的子串。子序列的定义:将一个字符串删去任意字符,形成新的字符串,称为原字符串的子序列。区别就是:子串在原串中是连续的,子序列不一定。子串计数问题,一般是给定一个字符串,求满足条件的子串的个数。一般解题方法遍历该字符串中的每个字符(for(i=1;i<=n;i++)),不重不漏的计算出以该字符为开头的方案数。答案就是每个字符答案的累加。关键在于不重不漏的算出包含该字符的方案数例题1:01序列链接解法1:原创 2022-03-22 12:00:30 · 6805 阅读 · 4 评论 -
Codeforces Round #749 (Div. 1 + Div. 2, based on Technocup 2022 Elimination Round 1) ABCD解题报告
A. Windblume OdeA. Windblume Ode题意:给定一个a数组,从中挑出尽可能多的数,使得这些数相加是合数。解析:若a1+a2+…+an 为合数,则输出整个a数组,否则遍历1-n,删去其中的一个数,若剩下的数字为合数,则直接输出。可以证明答案个数一定>=n-1#include <bits/stdc++.h>#include<ext/rope>#define pb push_back#define debug(x) cerr<<#x原创 2021-10-18 21:10:43 · 432 阅读 · 1 评论 -
单调栈的应用
单调栈,顾名思义,就是存放的元素是单调的栈。单调栈主要是用来计算某个数左边/右边第一个比它小/大的数,基本上所有单调栈的题都是用到单调栈的这个功能。下面以计算某个数左边第一个比它小的数为例,如果是暴力,对于一个数而言,复杂度是可以接受的,但是倘若要对一个数组所有的数字都计算左边第一个比他小的数呢?于是要利用单调栈。观察一串序列 3 9 7 4 5 我们要计算每个数左边第一个比他小的数(没有则输出-1) ,显然,第一个数的答案是-1,将3压入单调栈。计算数字9 时,我们发现单调栈的原创 2021-07-28 21:15:31 · 1088 阅读 · 1 评论 -
Divide by Zero 2021 and Codeforces Round #714 (Div. 2) ABC题解
A. Array and Peaks题目大意:寻找一个n的排列,使得这个排列有k个峰值。思路:从i=2每隔两个数放置一个当前没有放的最大值,在放k个之后就停止(如果不足k个就输出-1)。接着继续从i=1开始,没有放置数字的位置接着放置当前没有放的最大值。#include <iostream>#include <unordered_map>#include <cstring>using namespace std;typedef long long ll;u原创 2021-04-12 14:47:38 · 1274 阅读 · 2 评论 -
快速排序算法及其思想的应用(寻找一个序列中第k小元素)
快速排序的本质就是通过特定的算法将一段无序的数列分割成独立的两部分,再对这两部分采用同样的算法递归处理,最终使得序列有序。关键就在于这个特定的算法,具体实现起来,我们可以取序列中任意一个元素作为媒介,并把比其小的数字放在这个元素左边,把比其大的数字放在右边。由于可以选取任意的元素作为媒介,所以快速排序就有了很多种不同的类型。 其中比较常见的就是把中间元素或第一个元素作为媒介。第一种快排:把中间元素作为媒介核心代码: 前面一部分主要是实现以第(l+r)/2 个元素作为媒介, 并将比其小的元素放在前面,原创 2021-01-25 18:38:18 · 3216 阅读 · 0 评论 -
分析:pta 树的遍历
L2-006 树的遍历 (25分)给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:4 1 6 3 5 7 2分析:本题是已知二叉树的后序遍原创 2020-11-27 09:54:56 · 534 阅读 · 0 评论 -
pta题目:List Leaves
Given a tree, you are supposed to list all the leaves in the order of top down, and left to right.Input Specification:Each input file contains one test case. For each case, the first line gives a positive integer N (≤10) which is the total number of nod原创 2020-10-05 13:02:22 · 187 阅读 · 0 评论 -
学习笔记之多项式在计算机的多种表示方法
方法一:顺序存储的直接表示我们需要存储每一项的系数和指数,我们可以直接利用数组的下标作为指数,数组的内容做为系数。最简单的表示就出来了。缺点:存储空间比较达,可能存在大量的空间存放着0;可能造成运算缓慢(多个无用的0相加)方法二:结构数组表示法;这样的数组如何相加呢?首先我们应该对每个数组的指数进行从大到小的排序,并且比对两个数组中最大的项,并将之输出(如果指数相同则系数相加)方法三:链表方式存储其过程与方法二类似...原创 2020-09-18 12:18:54 · 1045 阅读 · 0 评论