双色球
ps:这题答案的输出格式有问题,而且没有样例解释。为了这个,考试期间发布了三次公告。
给定n个球,排成一行,其中有红球和蓝球。给定一个袋子中有r个红球,b个蓝球。目的插入若干个袋子中的红球和蓝球使得那列球的相同颜色不相邻。问:如果袋子中球够,那么插入完成后满足条件的最小球的数量是多少(就是原本一行球的基础上加上插入的球的数量);如果袋子中的球不够,返回还需要红球的数量和蓝球的数量
输入:1<=n r b<=100000 分别代表桌子上球的数量,袋子中红球数量,袋子中蓝球数量
输出:同上
例子:
in:5 2 1
rrbbr (字符串)
out: 7
自己的思路:100%
- 从第二个字符开始,遍历整个字符串;
- 每次判断当前字符是否与前一个字符相同,如果相同,相反颜色的球的数量减一,即如果碰到rr的组合,那么象征蓝球数量的b,减一。
- 最后根据剩下红球和蓝球的数量分别判断,如果其中一方的数量大于等于0说明,这个颜色的球够;如果是负数,则绝对值代表还需要的数量,如果两个都是大于等于0,那么返回n+红球开始的数量-红球最后剩下的数量+蓝球开始的数量-蓝球最后剩下的数量。
其实可能有点麻烦了,写到最后的时候,感觉可以用0,1表示,然后是否可以使用位运算操作。不过反正AC了,为了输出的格式花了半小时。
单峰数组
长度为n的数组,从中切分,使得前一半严格递增,后一半严格递减(就是从曲线图看,相邻的数字不可能相等) n<=100000
输入: 5
1 2 1 2 1 用空格隔开
输出:2
一个正整数,表示往这个数组中的某些元素上加上的总和至少为多少,才能符合上述条件.
样例中再下标为2,元素为1的这里加上2,使得数组变成 1 2 3 2 1 符合上述条件。
自己的思路:0%
按照题目的思路,应该是数组中所有元素都可以加上不同的数据,只是要求整个数组和的增量的最小值。
纳闷的问题:但是有一点没有搞懂,从中切开是指数组的正中间,还是随意切片都行?样例情况太单一了,如果是后者那么情况有点复杂。本人按照前者的思路进行了。
- 根据数组长度的奇偶性切分,如果是偶数,对半分;如果是奇数,中间的元素共用;分为a1,a2 (a1是原本的左半部分)
- 分别寻找a1的索引最小的最大值max_a1,max_idx_a1,以及a2索引最大的最大值max_a2,max_idx_a2。
- 分别遍历a1和a2,根据当前元素的索引idx和max_idx,以及当前元素和max_a的比较,确定是否需要加数字,加多少。
- 最后重新合并回去,计算(原数组的和-现数组的和)
总感觉想复杂了,或者是题目理解错了。因此没有通过
标语
给定一个字符串作为标语,一个字符串作为核心思想,问该标语有多少个连续子串包含核心思想作为其子序列。
连续子串:一个字符串从开始和结尾处删除若干个字符(可以是零个)构成的字符串 内容相同但是起止点不同的子串视为不同的子串
子序列:一个字符串从任意位置删除若干个字符构成的字符串
样例:
in:acac (标语)
ac(核心思想)
out:5 (符合子串的个数)
acac的子串有a,ac,aca,acac,c,ca,cac,a,ac,c而可以将ac作为其子序列的字串有ac,aca,acac,cac,ac
自己的思路:0% 由于理解错题意,以为是标语的子串中能够包含核心思想的子序列的个数,所以没做出来。
- 滑动窗口遍历标语获得其子串;
- 获得一个字串后,判断其子序列是否包含核心思想,重点有子串需要包含所有核心思想中的字符,并且有先后顺序。卡在了先后顺序的判断,不知道暴力求解是否会超时
负载均衡 (类似leetcode 1723:完成所有工作的最短时间)
小团在海鲜市场买了一块3核cpu(牛逼)需要用其执行n个任务,每个任务的耗时已知,问所有任务完成的耗时。1<=n<=100,每个任务耗时不超过1000,并且保证答案不会超过1000.
样例:
in:7 (任务数量)
5 4 6 6 8 3 7 (每个任务耗时,空格隔开)
out:13
正好所有时间加起来39,分成三组就是13,5+8,3+4+6,6+7
但是还是没有思路 0%
自动售货机(测试编程题)
已经给了java代码(为啥不给其他语言的?)能够(大致)实现题目要求,我们需要编写测试用例,然后调试。最后以测试用例的质量判分(都不知道几分),如果认为代码有问题可以修改(又没有学过java怎么改?)
第一次见到这种题目,写了一堆测试用例,特意选择了很多非法输入,但是由于不熟悉java语法,也不知道有啥漏洞,结构第一次看着说是通过全部的测试用例,开心不起来……