算法
文章平均质量分 63
用java,c,cpp实现,极少数python
搭车去柏林<‘^′>
work hard,play hard
展开
-
代码 测试用例 测试结果 测试结果 80. 删除有序数组中的重复项 II
是去寻找接下来还有那些满足,满足的就接着放。指针指向已经满足题目要求的数组的末尾,而。由于是递增的数组我们可以将两个条件(这题满足的条件有两种①。原创 2024-01-10 19:14:20 · 419 阅读 · 2 评论 -
2707.字符串中的额外字符
首先是用C语言写,因为平时我开发需要熟悉C。其次会详细解释一下这道题算法的知识点,但是是动态规划。这道题还有另一种更低时间复杂度的,这里不讲。C的哈希表在#include “uthash.h”,但是OJ要自己写。原创 2024-01-09 20:56:30 · 371 阅读 · 0 评论 -
412. Fizz Buzz C语言实现
数组就能放一个字符串,放字符串的话一定要记得多一个地方放。表示,并且开辟对应的地址空间。这就是下面代码做的事。这个字符,要不然输出是乱码。字符、字符串、指针。表示,字符串数组就用。原创 2024-01-08 13:37:04 · 442 阅读 · 0 评论 -
PTA天梯赛习题集
PTA团体天梯赛,没有刷完的题目。原创 2023-03-07 10:35:48 · 84 阅读 · 0 评论 -
Java实现7-32 说反话-加强版(通过所有测试点)
最开始的想法就是用空格分割成数组,然后倒序输出。下面这个版本除了卡时的点都过。然后开始了漫长而曲折的探索为啥超时之路,再下面放的是过了的代码,直接看通过代码的移步到最后。public class B732 { public static void main(String[] args) { Scanner in = new Scanner(System.in); String N = in.nextLine().trim(); // 当输入前面有空格时会保留前面的空格到字符数组里,.tr原创 2022-01-29 15:25:47 · 1710 阅读 · 1 评论 -
多机调度问题 贪心算法
问题描述:设有n个独立的作业{1,2,…n},由m台相同的机器进行加工处理。作业i所需的处理时间为t; (t;为正整数)。约定每个作业均可在任何一台机器.上加工处理,但未完工前不允许中断处理,即作业不能拆分成更小的子作业。要求给出一种作业调度方案,使得所给的n个作业在尽可能短的时间内由m台机器加工处理完成。贪心选择策略:按处理时间从大到小的顺序将作业分配给空闲的机器。个人感觉这个算法难点在于变量多数组t[…n]: t[i]表示作业i所需的处理时间。数组num[1…m]: num[j]表示第j台机器原创 2021-06-20 20:28:12 · 1662 阅读 · 0 评论 -
数据结构与算法题目集(中文)函数题
PTA数据结构与算法题目集(中文)的函数题部分。本身底子就差,还有好多语法知识都快忘了,这里写出来相当于一个查漏补缺了。不能一蹴而就。文章目录6-1 单链表逆转6-2 顺序表操作集6-3 求链式表的表长6-4 链式表的按序号查找6-5 链式表操作集6-6 带头结点的链式表操作集6-7 在一个数组中实现两个堆栈6-8 求二叉树高度6-9 二叉树的遍历6-10 二分查找6-11 先序输出叶结点6-12 二叉搜索树的操作集总结6-1 单链表逆转图解用头插法去做,1->3中,1被取出作为头,接着原创 2022-02-26 16:00:54 · 375 阅读 · 0 评论 -
01背包求解思路与实现
设有一个容量为C的背包,n个物品的集合U={u1, u2, …,}物品ui的体积和价值分别为si和vi。C, s, v是正整数。在U中选择物品装入背包,使得装入背包的物品总价值最大。设每种物品或完全装入或完全不装入背包。先理解一下递归方程:V[i,j]={0i=0或j=0(表的第一行第一列填充为0)V[i−1,j]j<si(体积装不下,决策第i个物品得到的价值和上一次最优价值一样)max{V[i−1,j],V[i−1,j−si]+vi}i>0,j≥si能装下考虑装不装哪个更有价值V[i,原创 2021-07-04 16:37:58 · 145 阅读 · 0 评论 -
分治法的套路
文章目录一、分治思想二、分治模板和时间复杂度三、按照模板写的几个分治的列子1.归并排序2.第K小元素3.最近点对问题一、分治思想将原问题分解成若干个相互独立的与原问题性质相同的子问题,子问题还用相同的分治方法解,分治过程一直进行下去,直至子问题的规模充分小,可直接解为止。并将这些子问题的解组合起来得到原问题的解。和递归有相似又有区别,这里的子问题可以不是递归的只有一个。但是分治确实带有递归的特性。二、分治模板和时间复杂度divideandconquer(P) //用分治法求问题P的解 if|P原创 2021-06-13 14:53:39 · 383 阅读 · 0 评论 -
Horner规则求多项式
下标ana_nan在伪代码里写作an,下标an−ja_{n-j}an−j写作a_(n-j)文章目录一、递归算法伪代码二、迭代算法伪代码三、Java实现一、递归算法伪代码真正的计算是从return的时候开始,即递归到了P0(x)=anP_0(x)=a_nP0(x)=an之后便不断计算Pm(x)=x∗Pm−1(x)+an−mP_m(x)=x*P_{m-1}(x)+a_{n-m}Pm(x)=x∗Pm−1(x)+an−m求Pn(x)的值的递归算法:算法HORNERERC输入:非负正数n,原创 2021-06-07 10:24:12 · 524 阅读 · 0 评论 -
代码为什么在本地编译器正常输出但在PTA编译器上无输出但也不报错?快读模板处理换行符
问题描述一道很简单的天梯赛初级题:L1-005 考试座位号,真的不建议用java去刷题,最开始提交的时候有两个测试点超时了,于是改用快读快输,结果答案错误。在测试区(我觉得这是PTA平台很不错子的地方)运行测试,好家伙没有输出,但是在自己的Eclipse是输出正确的。原因分析:首先还是检查是否有package,是否类名不是Main这些比较基础的。如下是过了的代码:可以看见我下面连续注释的三行,我发现问题在于Eclipse需要加上re.readLine();才能读取正确的准考证,而在测试案例加上之原创 2022-04-20 11:27:48 · 1285 阅读 · 0 评论 -
有限期作业安排问题
问题描述:给定n个作业j,jz,…jn,作业j的期限为d;收益为p,d, p;为非负整数, i=1, 2,n。规定只有在期限d;内完成任务j才能得到收益p;。设只有一台处理机,同时只能处理一个作业,且完成每个作业都需要一个单位时间。问如何安排作业处理顺序使得总收益最大?贪心选择策略:按收益从高到低的顺序逐个安排作业的处理顺序,在不影响收益高的作业的期限的前提下,尽量让期限早的作业先处理。算法JOB ARRANGEMENT输入:作业数n,表示n个作业的期限和收益的数组d和p输出:最优的作业安排序列J[原创 2021-06-19 21:28:48 · 535 阅读 · 0 评论 -
求时间复杂度
求时间复杂度会用到的公式,算法复杂性估计函数,还有递归方程的解法。个人笔记,自己给自己讲一下知识点和题目。文章目录一、常见阶大小比较二、算法复杂性估计函数三、几个常用替换的式子1.Stirling公式:2.阶乘和二项式系数四、计算次数总结一、常见阶大小比较从大到小:超指数阶:nnn^nnn,n!n!n!指数阶:9n/29^{n/2}9n/2, 2n2^n2n多项式阶:n3n^3n3, n∗log(n)n*log(n)n∗log(n), n1/2n^{1/2}n1/2对数阶:log2(原创 2021-06-06 14:29:42 · 520 阅读 · 0 评论 -
快速排序(java、python和c实现)
快速排序(java和c实现)原创 2022-01-19 17:25:06 · 577 阅读 · 0 评论 -
选择排序与插入排序递归和迭代分别实现
目的是从中理解递归的思想文章目录一、选择排序二、插入排序三、Java实现一、选择排序选择排序的思想是:选出最小元素并交换到第一个位置上后,问题转换为对其余元素的排序。这也是他的递归关系所在。选择排序的递归算法:SELECTSORTREC sort(1, n, A)end SELECTSORTRECsort(s, t, A)//对A[s..t]按升序选择排序。 if s<t then //等于的话就该退出循环了 k=s for j=k+1 to t//选出A[s..t]中原创 2021-06-09 17:52:40 · 343 阅读 · 0 评论 -
归并排序(合并排序)
文章目录一、归并排序其实很简单二、Java实现三、时间复杂度一、归并排序其实很简单根据分治法的思想,我们先把他拆成多个子问题,然后递归求解子问题。最后把子问题合并。归并排序其实是在合并的时候才真正排序了的。假设我们对84571362排序,那么子问题变为对8457和1362分别排序,一直递归下去,直到变成两个数间的排序。合并就是合并两个有序子序列。二、Java实现/** * 归并排序 * 速度赶上快排 */public class Merge { public static void ma原创 2021-06-12 13:13:04 · 1534 阅读 · 1 评论 -
递归的套路 归纳法
先明白递归的重点在哪里,然后通过几个典型的递归算法题目,更深一步理解掌握它。文章目录一、递归关系二、递归方程和边界条件三、递归模板关于递归的一系列常见算法详解:一、递归关系对原问题的求解可转化为对其性质相同的子问题的求解。二、递归方程和边界条件以斐波拉契数列为例子,式子就是递归方程写程序的主体,定义域是程序递归的出口f(n)={1n=01n=1F(n−1)+F(n−2)n>1f(n)=\begin{cases}1 & {n=0}\\1 & {n=1}\\F(n-1原创 2021-06-11 00:08:44 · 427 阅读 · 3 评论 -
矩阵链乘与最优剖分
文章目录一、矩阵链乘的递归关系二、矩阵链乘迭代及伪代码三、最优剖分思路四、最优剖分Java实现设P是一个有n个顶点的凸多边形,P中的弦是P中连接两个非相邻顶点的线段。用P中的(n-3)条弦将P剖分成(n-2)个三角形(如下图所示)。使得(n-3)条弦的长度之和最小的三角形剖分称为最优三角剖分。ACM平台1701题...原创 2021-06-19 10:03:04 · 347 阅读 · 0 评论 -
PTA基础编程题目集编程题C、Java实现(完整且通过所有测试点)
7-1 厘米换算英尺英寸7-2 然后是几点7-3 逆序的三位数7-4 BCD解密7-5 表格输出7-6 混合类型数据格式化输入7-7 12-24小时制7-8 超速判断7-9 用天平找小球7-10 计算工资7-11 分段计算居民水费7-12 两个数的简单计算器7-13 日K蜡烛图7-14 求整数段和7-15 计算圆周率7-16 求符合给定条件的整数集7-17 爬动的蠕虫7-18 二分法求多项式单根7-19 支票面额7-20 打印九九口诀表7-21 求特殊方程的正整数解原创 2022-01-31 23:31:10 · 3076 阅读 · 0 评论 -
嵌套矩形 有向无环图(DAG)的最长路径
有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d (相当于旋转X90度)。例如(1,5) 可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。请问可嵌套的矩形最多有多少个?矩形之间的“可嵌套”关系是一个典型的二元关系,二元关系可以用图来建模。如果矩形X可以嵌套在矩形Y里,我们就从X到Y连一条有向边。过程B原创 2021-06-19 10:25:50 · 170 阅读 · 0 评论 -
第K小元素 时间复杂度n
文章目录一、题目分析二、计算思路伪代码三、Java实现四、时间复杂度一、题目分析给出一个n个元素的序列,求其中的第k小元素(即序列按升序排序后的第k个元素)如果用排序时间复杂度nlogn,随机快速排序时间复杂度n。但是这里采用一种分治的方法使时间复杂度为n。若分治算法中,每次分解子问题后,只取其中一个子问题解之,丢弃其余的子问题。每次递归调用,问题的规模以常数因子被减小。设分解问题只需线性时间,则算法的时间复杂性满足Θn\Theta nΘn。二、计算思路伪代码大致思路是选一个“主元”,比他大的原创 2021-06-13 14:01:21 · 3868 阅读 · 1 评论 -
L型组件填图问题
问题描述:设 B 是一个 n×n 棋盘,n=2k,(k=1,2,3,…)。用分治法设计一个算法,使得:用若干个L 型条块可以覆盖住 B 的除一个特殊方格外的所有方格。其中,一个 L 型条块可以覆盖 3 个方格。且任意两个 L 型条块不能重叠覆盖棋盘。输入一个正整数 n,表示棋盘的大小是 nn 的。输出一个被 L 型条块覆盖的 nn 棋盘。该棋盘除一个方格外,其余各方格都被 L 型条块覆盖住。为区别出各个方格是被哪个 L 型条块所覆盖,每个 L 型条块用不同的数字或颜色、标记表示。思路解释public原创 2021-06-14 16:07:18 · 695 阅读 · 1 评论 -
最长公共子序列 删除一些字符使得剩下字符为回文串
文章目录一、分析二、伪代码1.填表2.获得序列三、java实现 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。还有这个回文是啥输出出来。由于回文是首尾相同的,那么从头到尾和从尾到头的字符串他们的最长公共子序列就应该是留下的回文串。原创 2021-06-14 13:57:12 · 1797 阅读 · 1 评论 -
生成全排列 格雷码 邮票问题(回溯)
文章目录1.题目分析2.伪代码1.题目分析大概意思就是给你一堆数字,把他们的全排列输出来。不要保存,直接就是一棵多分枝的树,每一层每一层走下去,到了树叶的时候输出,再返回到上一层去其他分支。也可理解为递归的时候,上一层(数组前面部分)都固定了,当前这层你把每个数都试了一遍。2.伪代码代码如下(示例):设一共有n层,目前在t层,A数组去记录当前排列fun(t) if(t=n) print(A) else for 每个数字都遍历一遍 A[t] <-> A[i]原创 2021-06-11 00:04:05 · 468 阅读 · 0 评论 -
寻找多数元素时间复杂度n
文章目录一、题目分析1.暴力2.排序3.根据题目特点二、Java实现一、题目分析问题描述:求n个元素序列中的多数元素,多数元素为在序列中出现的次数多于n/2的元素。隐藏条件:一个序列的多数元素若存在则唯一,也可以没有。1.暴力其一是遍历一次,另一个数组Count每个元素值对应Count的下标,Count内容负责计数。第二次遍历Count找多数元素。但是空间可能超级大,时间复杂度是n。其二就是两重循环,把数组前一半多一的数都数一次,看看他们后面还有多少个和它们一样的,(如果数组后一半减一才出现的原创 2021-06-10 15:56:31 · 465 阅读 · 0 评论 -
数据结构与算法题目集(中文)编程题
PTA数据结构中文题目集原创 2022-11-05 22:04:50 · 1106 阅读 · 0 评论