整理题目一:
幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友同班,请你帮忙把同班的小朋友找出来。
小朋友的编号是整数,与前一位小朋友同班用Y表示,不同班用N表示。
输入描述:
输入为空格分开的小朋友编号和是否同班标志。
输出描述:
输出为两行,每一行记录一个班小朋友的编号,编号用空格分开,且:
1.编号需按照升序排列。
2.若只有一个班的小朋友,第二行为空行。
比如:
输入 :
1/N 2/Y 3/N 4/Y
输出 :
1 2
3 4
考察知识点:并查集
破解保险箱密码
小明拥有一个保险箱,但是忘记了密码。已知密码在范围在0~9中,且每位数字仅出现一次。现小明只记得密码是由序列s[]里的数字组成(s[i] ∈ [0, 9], s.length ∈ [1, 10]s[i]∈[0,9],s.length∈[1,10]),密码最少为N位(N ∈ [0, 10]N∈[0,10]),且密码各位上的数字,是从左到右依次递增的。
已知密码不会为空,请输出所有可能出现的密码。
输出结果要求: 输出结果需要按位数数字从小到大排列(即字典序)。
给你一个数字让你把他拆分成两个素数的乘积
作者:牛客861261412号
链接:https://www.nowcoder.com/discuss/952553?toCommentIpt=1
来源:牛客网
第一题数组去重排序,就是把一个数组重复的全删除,然后每个数组只出现一次然后从高到低排序。
第二题停车场车辆统计,也是数组相关的问题,就是,三种车,大车中车小车,占3,2,1个地方,然后判定最少可以停多少辆车。
第三题叠级木,大概就是用数组堆叠组成一道墙。然后用给定的数组堆墙。
三道题都遇到了原题,很简单。
大侠疗伤
大侠受了伤,医生开了m (m >= 3 && m <= 37)个药(1…m),要全部服用才能完全康复,大侠每天最多吃n个药,每个药之间存在约束关系 例如[1, 2]表示吃药2之前必须先吃药1,并且存在约束关系的药禁止在同一天服用,不存在循环约束
输入:
m
n
k //约束数量
[a, b]… // k个约束项
输出:
一个整数,表示大侠至少需要服药几天才能完全康复
第一行输入二维数组的行数和列数,以空格区分。然后输入矩阵,矩阵元素之间 同样以空格作为分隔符。
求矩阵中和最大的矩阵。例如
输入: 3 3
-1 3 -1
-3 2 3
4 5 3
输出
2 3
5 3
二维前缀和
0-1背包问题
分割等和子集
描述: 给定二维数组 jobs[n][2] 表示需要完成的n个工作,
其中第一维表示该工作最多等待的时间,
第二维表示在等待时间内完成该工作可以获得的积分,
每个工作完成需要单位1的时间, 超过等待时间则不能获得该积分, 但是该任务也需要完成
求从0时刻开始, 一次只能干一个工作, 完成这些工作最多能获得多少积分
描述: 给定长度为n的数组nums, 1 <= n <= 100,
求把nums均分成两组的方案, 若无则输出-1, 否则输出均分数和任意一种方案
例如 nums = [3,3,4,5,7]
输入:
5
3 3 4 5 7
输出:
11
4 7
3 3 5
有三个团队共同完成M个项目 给定三个团队的人力总和值 对于某个项目需要多个团队共同投入完成
每个项目有预估价值 在人力允许的范围内 求价值最大
输入
项目个数:m(0<m<=20)
三个团队人力总和:s1,s2,s3(0<si<=1000)
每个项目预估价值:v1v2..vn(0<vi<=1000000)
每个项目需要人力:
输出
最大价值
样例1
输入:2 (2个项目)
100 100 100 (三个团队各自人力总和)
10000 8000 (每个项目预估价值)
60 60 60 (第一个项目对于三个团队人力需求)
60 60 60 (第二个…..)
输出:10000
后来想起来好像是个三维的0-1背包 三个用例都过了 不知道这样写有问题没 大佬帮忙看看
计算礼品发放的最小分组数目
又到了一年的末尾,项目组让小明负责新年晚会的小礼品发放工作。为使得参加晚会的同时所获得的小礼品价值相对平衡,需要把小礼品根据价格进行分组,但每组最多只能包括两件小礼品,并且每个分组的价格总和不能超过一个价格上限。为了保证发放小礼品的效率,小明需要找到分组数目最少的方案。
你的任务是写一个程序,找出分组数最少的分组方案,并输出最少的分组数目。
输入
第一行数据为分组礼品价格之和的上限
第二行数据为每个小礼品的价格,按照空格隔开,每个礼品价格不超过分组价格和的上限
输出
输出最小分组数量
样例
输入: 5
1 2 5
输出: 2
// 疫情期间,需要大家保证一定的社交距离,公司组织开交流会议,座位有一排共N个座位,编号分别为[0…N-1],要求员工一个接着一个进入会议室,
// 并且可以在任何时候离开会议室。
// 满足:每当一个员工进入时,需要坐到最大社交距离(最大化自己和最近其他人的距离)的座位;如果有多个这样的座位,则坐在索引最小的那个位置。
// 输入描述:
// 会议座位总数seatNum,(1<=seatNum<=500)
// 员工的进出顺序seatOrLeave数组,元素值为1;表示进场,元素值为负数,表示出场(特殊:位置0的员工不会离开),例如-4表示坐在位置4的员工离
// 开(保证有员工坐在该座位上)
// 输出描述:
// 最后进来员工,他会坐在第几个位置,如果位置已满,则输出-1
// 示例1 输入输出实例仅供调试,后台判题数据一般不包含实例
// 输入
// 10
// [1,1,1,1,-4,1]
// 输出
// 5
// 说明
// seat -> 0,坐在任何位置都行,但是要给他安排索引最小的位置,也就是座位0。
// seat -> 9,要和旁边的人距离最远,也就是座位9。
// seat -> 4,要和旁边的人距离最远,应该做到中间,也就是座位4。
// seat -> 2,员工最后坐在2号座位上。
// leave(4),4号座位的员工离开。
// seat -> 5,员工最后坐在5号座位上。