算法练习
1号寝林某人
这个作者很懒,什么都没留下…
展开
-
20210119算法练习笔记
20210119算法练习笔记反转list操作可调用Collections内部的函数reverse();//反转listCollections.reverse(lists);addAll()addAll方法添加目标对象中的所有元素到本对象,目标对象元素改变后对本对象的元素不影响Arrays.sort()对自定义的类用sort//按类中的val升序排序,实际上是重写了comparatorArrays.sort(edges, (o1, o2) -> o1.val - o2.val原创 2021-02-03 15:25:46 · 89 阅读 · 0 评论 -
下一个排列
下一个排列实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。例如:[1,2,3]->[1,3,2];[3,2,1]->[1,2,3]如何寻找下一个排列:记数组为nums,从后往前找,找到第一个比前一个大的数,记为i,i-1;寻找len~i中第一个比nums[i-1]大的数,与nums[i-1]交换后,再将nums[i~len-1]安从小原创 2021-02-03 15:25:11 · 75 阅读 · 0 评论 -
快速排序
快速排序public class QuickSort { public void partition(int l,int r,int[] arr){ if(l>=r) return; int tmp=arr[l]; int i=l,j=r; while(i<j){ //快排要防止下标越界while循环中要加入限制; //找到下一个不大于tmp的数; w原创 2021-02-03 15:23:57 · 70 阅读 · 0 评论 -
java LFU和LRU实现 (leetcode 460. LFU缓存)
LRU和LFU都是内存管理的页面置换算法。LFU:最不经常使用淘汰算法(Least Frequently Used)。LFU是淘汰一段时间内,使用次数最少的页面。LRU:最近最少使用淘汰算法(Least Recently Used)。LRU是淘汰最长时间没有被使用的页面。LRU如下:public class LRUCache { class Node { ...原创 2020-04-05 13:27:21 · 367 阅读 · 0 评论 -
问题 D: 二叉树遍历
题目描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入输入包括1行字符串,长度不超过100。输出可能有多组测试数据,对于每组数据,输出将输入字符串建...原创 2019-03-22 10:31:46 · 206 阅读 · 0 评论 -
问题 A: 最长公共子序列
题目描述给你一个序列X和另一个序列Z,当Z中的所有元素都在X中存在,并且在X中的下标顺序是严格递增的,那么就把Z叫做X的子序列。例如:Z=<a,b,f,c>是序列X=<a,b,c,f,b,c>的一个子序列,Z中的元素在X中的下标序列为<1,2,4,6>。现给你两个序列X和Y,请问它们的最长公共子序列的长度是多少?输入输入包含多组测试数据。每组输入...原创 2019-03-25 18:14:19 · 136 阅读 · 0 评论 -
问题 B: 树的高度
题目描述一棵树有n个节点,其中1号节点为根节点。输入第一行是整数n,表示节点数后面若干行,每行两个整数a b,表示b是a的子节点。输出求这棵树的高度(根节点为第1层)样例输入51 21 33 43 5样例输出3#include<stdio.h>int father[10000]={0};int main(){ in...原创 2019-03-22 11:21:21 · 855 阅读 · 0 评论 -
问题 A: 二叉排序树(二叉排序树基础的建立,遍历)
题目描述输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。输入输入第一行包括一个整数n(1<=n<=100)。接下来的一行包括n个整数。输出可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。每种遍历结果输出一行。每行最后一个数据之后有一个空格。样例输入12 28 15 421 1...原创 2019-03-22 11:57:03 · 259 阅读 · 0 评论 -
问题 B: Problem E
题目描述请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。输入有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。输出对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。样例输入4[(d+f)*{}][(2+3))()}...原创 2019-03-18 20:36:02 · 119 阅读 · 0 评论 -
问题 A: 简单计算器
题目描述读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。输入测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。输出对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。样例输入30 / 90 - 26 + 97 - 5 ...原创 2019-03-18 19:46:08 · 342 阅读 · 0 评论 -
问题 B: 确定比赛名次
题目描述有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。输入输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中...原创 2019-03-25 14:51:50 · 515 阅读 · 0 评论 -
问题 A: 复原二叉树
题目描述小明在做数据结构的作业,其中一题是给你一棵二叉树的前序遍历和中序遍历结果,要求你写出这棵二叉树的后序遍历结果。输入输入包含多组测试数据。每组输入包含两个字符串,分别表示二叉树的前序遍历和中序遍历结果。每个字符串由不重复的大写字母组成。输出对于每组输入,输出对应的二叉树的后续遍历结果。样例输入DBACEGF ABCDEFGBCAD CBAD样例输出A...原创 2019-03-21 21:00:06 · 175 阅读 · 0 评论 -
问题 D: 【宽搜入门】魔板
题目描述在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板。这是一张有8个大小相同的格子的魔板:1 2 3 48 7 6 5我们知道魔板的每一个方格都有一种颜色。这8种颜色用前8个正整数来表示。可以用颜色的序列来表示一种魔板状态,规定从魔板的左上角开始,沿顺时针方向依次取出整数,构成一个颜色序列。对于上图的魔板状态,我们用序列(1,2,3,4,5,6,7,8)来表示。这...原创 2019-03-21 20:17:14 · 435 阅读 · 1 评论 -
问题 A: Speech Patterns (25)
题目描述People often have a preference among synonyms of the same word. For example, some may prefer "the police", while others may prefer "the cops". Analyzing such patterns can help to narrow down a s...原创 2019-03-18 11:44:23 · 130 阅读 · 0 评论 -
问题 B: Student List for Course (25)
题目描述Zhejiang University has 40000 students and provides 2500 courses. Now given the registered course list of each student, you are supposed to output the student name lists of all the courses.输入...原创 2019-03-18 09:43:35 · 156 阅读 · 1 评论 -
问题 A: Course List for Student (25)
题目描述Zhejiang University has 40000 students and provides 2500 courses. Now given the student name lists of all the courses, you are supposed to output the registered course list for each student who ...原创 2019-03-18 09:07:57 · 174 阅读 · 0 评论 -
问题 A: 矩形嵌套
题目描述有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。输入第一行是一个正正数N(0<N&...原创 2019-03-25 20:10:13 · 243 阅读 · 0 评论 -
问题 B: 二叉搜索树(判断两个二叉搜索树是否相同)
题目描述判断两序列是否为同一二叉搜索树序列输入开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。输出如果序列相同则输出Y...原创 2019-03-22 14:44:30 · 537 阅读 · 0 评论 -
问题 A: 算法10-10,10-11:堆排序
输入输入的第一行包含1个正整数n,表示共有n个整数需要参与排序。其中n不超过100000。第二行包含n个用空格隔开的正整数,表示n个需要排序的整数。输出只有1行,包含n个整数,表示从小到大排序完毕的所有整数。请在每个整数后输出一个空格,并请注意行尾输出换行。样例输入102 8 4 6 1 10 7 3 5 9样例输出1 2 3 4 5 6 7 8 9 1...原创 2019-03-22 19:31:43 · 1062 阅读 · 0 评论 -
分治算法-计算问题
题目:本题要求出 1 在两个数 a 和 b 之间出现的次数。可以用分治算法的思想,先求出 1 在 0~a 之间出现的次数,再求出 1 在 0~b 之间出现的次数,然后两者相减即可。现在的问题是如何求出 1 在 0~a 之间出现的次数。将 0~197 的数列列出后可以看出规律: 可以求出 1 在 190~197 之间出现的次数,然后考虑 1 在 0~189 之间出现的次数。190~197 中 1 在原创 2017-03-11 20:50:08 · 511 阅读 · 0 评论 -
STL中的数据结构笔记(一)
栈:#include<stack>stack<TYPE>StackName//frequently commands;stack<int>s;s.push(1);s.pop();s.empty();vector 容器:#include<vector>vector<TYPE>s;//frequently commands;vector<int>a;a.push_back(1);原创 2017-04-20 22:15:02 · 193 阅读 · 0 评论 -
问题 D: 继续畅通工程
题目描述省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。输入测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 1< N < 100 );随后的 N(N...原创 2019-03-24 16:14:18 · 216 阅读 · 0 评论 -
问题 E: 最短路径问题
题目描述给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。输入输入n,m,点的编号是1~n,然后是m行,每行4个数a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数s,t;起点s,终点t。n和m为0时输入结束。(1<n<=1000, 0&...原创 2019-03-24 11:33:06 · 288 阅读 · 0 评论 -
问题 D: 最短路径
题目描述有n个城市m条道路(n<1000, m<10000),每条道路有个长度,请找到从起点s到终点t的最短距离和经过的城市名。输入输入包含多组测试数据。每组第一行输入四个数,分别为n,m,s,t。接下来m行,每行三个数,分别为两个城市名和距离。输出每组输出占两行。第一行输出起点到终点的最短距离。第二行输出最短路径上经过的城市名,如果有多条最短路径,...原创 2019-03-24 11:07:21 · 1108 阅读 · 1 评论 -
问题 G: 点菜问题
题目描述北大网络实验室经常有活动需要叫外买,但是每次叫外买的报销经费的总额最大为C元,有N种菜可以点,经过长时间的点菜,网络实验室对于每种菜i都有一个量化的评价分数(表示这个菜可口程度),为Vi,每种菜的价格为Pi, 问如何选择各种菜,使得在报销额度范围内能使点到的菜的总评价分数最大。 注意:由于需要营养多样化,每种菜只能点一次。输入输入的第一行有两个整数C(1 <= C...原创 2019-03-26 20:18:30 · 283 阅读 · 0 评论 -
问题 C: 合唱队形
题目描述N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK,则他们的身高满足T1 < T2 < … < Ti , Ti > Ti+1 > … > TK (1 <= i <...原创 2019-03-26 18:49:18 · 527 阅读 · 0 评论 -
问题 A: 第一题
题目描述该题的目的是要你统计图的连通分支数。输入每个输入文件包含若干行,每行两个整数i,j,表示节点i和j之间存在一条边。输出输出每个图的联通分支数。样例输入1 44 35 5样例输出2#include<stdio.h>#include<vector>#include<stdlib.h>#include&...原创 2019-03-23 09:40:14 · 369 阅读 · 0 评论 -
问题 B: 连通图
题目描述给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的。输入每组数据的第一行是两个整数 n 和 m(0<=n<=1000)。n 表示图的顶点数目,m 表示图中边的数目。如果 n 为 0 表示输入结束。随后有 m 行数据,每行有两个值 x 和 y(0<x, y <=n),表示顶点 x 和 y 相连,顶点的编号从 1 开始计算。输入不保证这些边是否重...原创 2019-03-23 10:41:18 · 251 阅读 · 0 评论 -
问题 B: 序列合并
题目描述有两个长度都为N的序列A和B,在A和B中各取一个数相加可以得到N2个和,求这N2个和中最小的N个。输入第一行一个正整数N(1 <= N <= 100000)。第二行N个整数Ai,满足Ai <= Ai+1且Ai <= 109第三行N个整数Bi,满足Bi <= Bi+1且Bi <= 109输出输出仅有一行,包含N个整数,...原创 2019-03-22 20:27:35 · 937 阅读 · 0 评论 -
问题 C: 【宽搜入门】8数码难题
题目描述初始状态的步数就算1,哈哈输入:第一个3*3的矩阵是原始状态,第二个3*3的矩阵是目标状态。输出:移动所用最少的步数Input2 8 31 6 47 0 51 2 38 0 47 6 5Output6注:题目意思是,8个数加一个空位(0),每一步可以让周围的数(上下左右)走到这个空位里来,问初始矩阵最少要走几步才能变成结...原创 2019-03-21 09:49:45 · 303 阅读 · 1 评论 -
问题 F: 10进制 VS 2进制
题目描述对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们称B为A的二进制逆序数。例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。输入一个1000位(即10^999)以内的十进制数。输出输入的十进制数的二进制逆序数。样例输入985样例输出...原创 2019-03-17 16:02:35 · 186 阅读 · 0 评论 -
问题 E: Problem B
题目描述请写一个程序,对于一个m行m列的(1<m<10)的方阵,求其每一行,每一列及主对角线元素之和,最后按照从大到小的顺序依次输出。输入共一组数据,输入的第一行为一个正整数,表示m,接下来的m行,每行m个整数表示方阵元素。输出从大到小排列的一行整数,每个整数后跟一个空格,最后换行。样例输入415 8 -2 631 24 18 71-3 -9 27 ...原创 2019-03-02 17:14:03 · 445 阅读 · 0 评论 -
问题 C: EXCEL排序
题目描述Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。输入...原创 2019-03-02 16:31:43 · 686 阅读 · 0 评论 -
问题 H: 编排字符串
题目描述请输入字符串,最多输入4个字符串,要求后输入的字符串排在前面,例如输入:EricZ输出:1=EricZ输入:David输出:1=David2=EricZ输入:Peter输出:1=Peter2=David3=EricZ输入:Alan输出:1=Alan2=Peter3=David4=EricZ输入:Jane输出:1=Jane2=Ala...原创 2019-03-02 11:10:01 · 107 阅读 · 0 评论 -
问题 B: 首字母大写
题目描述对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。在字符串中,单词之间通过空白符分隔,空白符包括:空格(' ')、制表符('\t')、回车符('\r')、换行符('\n')。输入输入一行:待处理的字符串(长度小于100)。输出可能有多组测试数据,对于每组数据,输出一行:转换后的字符串。样例输入if so, you alr...原创 2019-02-24 14:08:08 · 856 阅读 · 0 评论 -
问题 B: 数制转换
题目描述求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。输入输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。...原创 2019-02-24 11:20:28 · 764 阅读 · 0 评论 -
问题 A: 又一版 A+B
题目描述输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。输入输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。当m为0时输入结束。输出输出格式:每个测试用例的输出占一行,输出A+B的m进制数。样例输入<span style="color:#333333"&...原创 2019-02-24 10:18:13 · 124 阅读 · 0 评论 -
问题 D: 日期类
题目描述编写一个日期类,要求按xxxx-xx-xx 的格式输出日期,实现加一天的操作。输入输入第一行表示测试用例的个数m,接下来m行每行有3个用空格隔开的整数,分别表示年月日。测试数据不会有闰年。输出输出m行。按xxxx-xx-xx的格式输出,表示输入日期的后一天的日期。样例输入21999 10 202001 1 31样例输出1999-10-21200...原创 2019-02-23 16:00:37 · 146 阅读 · 0 评论 -
问题 C: 打印日期
题目描述给出年分m和一年中的第n天,算出第n天是几月几号。输入输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。输出可能有多组测试数据,对于每组数据,按 yyyy-mm-dd的格式将输入中对应的日期打印出来。样例输入2013 602012 3002011 3502000 211样例输出2013-03-012...原创 2019-02-23 13:51:09 · 171 阅读 · 0 评论 -
问题 B: Day of Week
题目描述We now use the Gregorian style of dating in Russia. The leap years are years with number divisible by 4 but not divisible by 100, or divisible by 400.For example, years 2004, 2180 and 2400 are ...原创 2019-02-23 13:27:55 · 481 阅读 · 0 评论