算法
刷题
Maktub.
这个作者很懒,什么都没留下…
展开
-
排序算法合集
归并排序public class MergeSort implements IArraySort { @Override public int[] sort(int[] sourceArray) throws Exception { // 对 arr 进行拷贝,不改变参数内容 int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); if (arr.length <原创 2022-02-28 20:29:02 · 96 阅读 · 0 评论 -
BFS算法套路框架
BFS问题的本质就是在一副“图”中找到起点 start 到终点 target 的最短距离。模板框架//计算从起点start到终点target的最短路径int BFS(Node start,Node target){ Queue<Node> q; Set<Node> visited; //避免走回头路 q.offer(start); //将起点加入队列 visited.add(start); //记录扩散的步数 int原创 2022-01-17 00:46:19 · 305 阅读 · 0 评论 -
【leetcode】101.对称二叉树
递归class Solusion{ public boolean isSymmetric(TreeNode root){ return check(root,root); } public boolean check(TreeNode p,TreeNode q){ if(p==null && q==null){ return tree; } else if(p==nu...原创 2021-12-20 12:05:13 · 425 阅读 · 0 评论 -
机试
A#include <iostream>#include <algorithm>#include <fstream>#include <cstdio>#include <string>#include <cstring>#include <vector>#include <queue>#include <stack>#include <cmath>#include原创 2020-05-12 17:15:46 · 133 阅读 · 0 评论 -
c++文件读入读出
#include <iostream>#include <algorithm>#include <fstream>#include <cstdio>#include <string>#include <cstring>#include <vector>#include <queue>#...原创 2020-05-06 10:30:17 · 519 阅读 · 0 评论 -
继续畅通工程
链接:https://www.nowcoder.com/questionTerminal/16212f7d46e44174b5505997ea998538?f=discussion来源:牛客网省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已...原创 2020-05-05 11:46:29 · 222 阅读 · 0 评论 -
畅通工程
题目描述 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。输入描述: 测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M (N, M < =100 )...原创 2020-05-05 11:11:00 · 329 阅读 · 0 评论 -
全排列
题目描述给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。输入描述:输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。输出描述:输出这个字符串的所有排列方式,每行一个排列。要...原创 2020-04-28 23:17:04 · 153 阅读 · 0 评论 -
编程练习
1.相隔天数 题目:输入日期格式:YYYYMMDD,求与 20190205 相隔的天数。 例: 输入: 20190208 输出: 3#include <stdio.h>int Month1[12]={31,28,31,30,31,30,31,31,30,31,30,31};int Month2[12]={31,29,31,30,31,30...原创 2020-04-26 00:16:11 · 159 阅读 · 0 评论 -
N的阶乘(大整数)
题目描述输入一个正整数N,输出N的阶乘。输入描述:正整数N(0<=N<=1000)输出描述:输入可能包括多组数据,对于每一组输入数据,输出N的阶乘示例1输入复制4515输出复制241201307674368000//C++实现#include <cstdio>#include <cstr...原创 2020-02-19 18:50:15 · 403 阅读 · 0 评论 -
LeetCode200 岛屿数量
给定一个由'1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出:1示例2:输入:11000110000010000011输出: 3思路:两种方法DFS和BFSvoid B...原创 2020-02-18 14:09:36 · 131 阅读 · 0 评论 -
LeetCode96 不同的二叉搜索树
给定一个整数 n,求以1 ...n为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 ...原创 2020-02-16 20:09:24 · 121 阅读 · 0 评论 -
LeetCode452 用最少数量的键引爆气球
在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart≤ x ≤ xen...原创 2020-02-16 00:57:02 · 90 阅读 · 0 评论 -
LeetCode376 摇摆序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如,[1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3)是正负交替出现的。相反, [1,4,7,2,5]和[1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个...原创 2020-02-15 13:26:56 · 181 阅读 · 0 评论 -
LeetCode90 子集II
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]思路:因为题目要求子集不能重复,所以优先想到使用set。 由于set可能将[1,2]和[2,1]判断为不同的子...原创 2020-02-12 21:38:04 · 120 阅读 · 0 评论 -
LeetCode78 子集
Given a set of distinct integers, nums, return all possible subsets (the power set).Note: The solution set must not contain duplicate subsets.Example:Input: nums = [1,2,3]Output:[ [3],[1]...原创 2020-02-12 19:03:17 · 114 阅读 · 0 评论 -
【练习】问题 H: 最大报销额
题目描述现有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不超过给定额度的最大报销额。输入测试输入包含若干测试用例。每个测试用例的第1行包含两个正数Q和N,其中Q(Q<=2000)是给定的...原创 2020-02-11 14:05:56 · 608 阅读 · 0 评论 -
【练习】问题 B: 拦截导弹
题目描述某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。输入每组输入有两行,第一行,输入雷...原创 2020-02-09 18:14:40 · 753 阅读 · 0 评论 -
【练习】问题 C: 货币系统
题目描述母牛们不但创建了他们自己的政府而且选择了建立了自己的货币系统。[In their own rebellious way],,他们对货币的数值感到好奇。传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单位面值组成的。母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值。举例来说, 使用一个货币系统 {1,2,5,10,...}产生 18单...原创 2020-02-09 16:06:29 · 853 阅读 · 0 评论 -
【练习】问题 B: 采药
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医 师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间, 在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”如果你是...原创 2020-02-09 15:21:58 · 222 阅读 · 0 评论 -
【练习】问题 A: 装箱问题
【问题描述】有一个箱子的容量为V(V为正整数,且满足0≤V≤20000),同时有n件物品(0的体积值为正整数。要求从n件物品中,选取若干装入箱内,使箱子的剩余空间最小。输入:1行整数,第1个数表示箱子的容量,第2个数表示有n件物品,后面n个数分别表示这n件物品各自的体积。输出:1个整数,表示箱子剩余空间。【输入输出样例】输入:24 6 8 3 12 7 9 7输出:0...原创 2020-02-09 15:03:26 · 228 阅读 · 0 评论 -
动态规划题目总结
1.最大连续子序列for(int i=1;i<n;i++){ dp[i]=max(A[i],dp[i-1]+A[i]);}2.最长不下降子序列int ans=-1;for(int i=1;i<=n;i++){ dp[i]=1; for(int j=1;j<i;j++){ if(A[j]<=A[i]&&...原创 2020-02-07 16:54:40 · 126 阅读 · 0 评论 -
【练习】问题 A: 最长公共子序列
题目#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=100;char A[N],B[N],dp[N][N];int main(){ while(scanf("%s%s",A+1,B+1)!=EOF){ int le...原创 2020-02-07 15:31:21 · 169 阅读 · 0 评论 -
【练习】PTA B1025 反转链表
有一个测试用例无法通过。https://pintia.cn/problem-sets/994805260223102976/problems/994805296180871168#include <cstdio>#include <cstdlib>#include <algorithm>using namespace std;const int...原创 2020-01-23 00:20:57 · 129 阅读 · 0 评论 -
【练习】PTA A1052 Linked List Sorting
静态链表的练习每次都会运行超时,不知道循环该怎么改。https://pintia.cn/problem-sets/994805342720868352/problems/994805425780670464注意:所有数据均无效。#include <stdio.h>#include <stdlib.h>#include <algorithm>...原创 2020-01-22 12:55:07 · 114 阅读 · 0 评论 -
组合数计算
计算 n! 中质因子个数方法一:直接从 1~n 遍历确认质因子个数int cal(int n,int p){ int ans=0; for(int i=2;i<=n;i++){ int temp=i; while(temp%p==0){ ans++; temp/=p; }...原创 2020-01-17 17:14:14 · 282 阅读 · 0 评论 -
【练习】A1023 Have Fun with Numbers
一个用例通过不了。(已解决)https://pintia.cn/problem-sets/994805342720868352/problems/994805478658260992#include <cstdio>#include <cstring>#include <cstdlib>int num[10]={0};struct bign{...原创 2020-01-17 11:45:34 · 87 阅读 · 0 评论 -
【练习】B 1034 有理数四则运算
一直有两个测试用例通过不了,按照算法笔记上面改成了long long还是不行。#include <cstdio>#include <cstdlib>typedef long long ll;struct Fraction{ ll up,down;};ll gcd(ll a,ll b){ if(b==0) return a; else return gc...原创 2020-01-15 16:25:31 · 196 阅读 · 0 评论 -
C/C++ Tips
小写字母与大写字母的ASCII之间的差值为32。a = getchar(); //输入小写字母 b = a-32; //将小写字母转化为大写字母#include<algorithm>:algorithm意为"算法",是C++的标准模板库(STL)中最重要的头文件之一,提供了大量基于迭代器的非成员模板函数。 生成随机数#include <stdio.h>#...原创 2020-01-07 20:15:34 · 201 阅读 · 0 评论 -
memset()函数
memset()函数原型是 extern void *memset(void *buffer,int a,int count)buffer 是指针或者数组,void是要初始化的首内存的首地址;a是要初始化的变为的数据,count是buffer的长度,即大小这函数多用于socket中清空数组,如:结构体:struct Student{ int id; int scor...转载 2020-01-07 16:38:58 · 150 阅读 · 0 评论 -
【练习】PTA A1005 Spell It Right
两个测试用例不能通过,还没找到问题。#include <stdio.h>#include <stdlib.h>#include <string.h>char num[10][7]={"zero","one","two","three","four","five","six","seven","eight","nine"};int main()...原创 2020-01-06 10:45:23 · 168 阅读 · 0 评论 -
C语言中单引号和双引号的区别
含义不同:用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。而一般我们的编译器采用的都是ASCII字符集。 而双引号引起的字符串,代表的是一个指向无名数组起始字符的指针。大小不同:用单引号引起的一个字符大小就是一个字节。 而用双引号引起的字符串大小是字符的总大小+1,因为用双引号引起的字符串会在字符串末尾添加一个二进制为0的字符'\0'。...转载 2020-01-05 11:42:07 · 1325 阅读 · 0 评论 -
C语言中gets()和scanf()的区别
在C语言中,scanf()函数和gets()函数都可用于输入字符串,但是也有很多区别。主要区别如下:gets()的输入分隔符只有回车,因此gets能够读入空格。如果使用gets()输入"Hello World",运行之后的结果是"Hello World",但是使用scanf()输入只能输出"Hello"。 scanf()和gets()对待缓冲区的回车符也是完全不同的。scanf()在读取...转载 2020-01-04 16:55:42 · 501 阅读 · 0 评论 -
【练习】PTA A1058 A+B in Hogwarts
测试样例不能全部通过,待解决。#include <stdio.h>#include <stdlib.h>struct money{ int Galleon,Sickle,Knut;}A,B,sum;void init(){ sum.Galleon=0; sum.Sickle=0; sum.Knut=0;}void addKunt(){ ...原创 2020-01-04 16:08:12 · 143 阅读 · 0 评论 -
【练习】PTA A1027 Colors in Mars
题目要求将[0,168]范围内的三个十进制整数转换成13进制数,可以使用进制转换函数来实现进制转换输出,但是要特别考虑对0的处理(有两个测试用例通过不了,暂时还没有找到问题)。#include <stdio.h>#include <stdlib.h>const char radix[13]={'0','1','2','3','4','5','6','7','8...原创 2020-01-04 13:03:16 · 113 阅读 · 0 评论 -
【练习】PTA A1065 A+B and C (64bit)
由于整数区间位于[-2^63,2^63],使用long long将两个整数相加可能发生溢出(正溢出或负溢出),所以直接进行比较可能会发生错误。当发生正溢出时,A>0,B>0,A+B<0,结果应该为true。当发生负溢出时,A<0,B<0,A+B>=0((-2^64)%2^64=0),结果应该为false。#include <stdio.h...原创 2019-12-31 18:41:46 · 161 阅读 · 0 评论 -
【练习】PTA B1032 挖掘机技术哪家强
由于题目中涉及学校编号和总分两个变量,考虑使用结构体来存储。首先输入参赛人数N,然后依次输入各个学校的编号和分数,如果编号已经存储在数组当中只需将分数累加,若没有则存储为新的数组元素,最后进行比较输出总得分最高的学校编号及其总分。但是提交之后只有三个测试用例可以通过,有一个超时。不知道具体是哪里的问题,如果有大佬知道,希望能不吝赐教,感激不尽。#include <stdio...原创 2019-12-29 10:32:30 · 281 阅读 · 0 评论