两道编程题。
1
一串size为N的数列,代表一条直线上书店的位置。
一个数字M,代表主角想要到去的书店到数量。
返回两个书店之间最小值到最大值。
例子,N = 5,{1 2 4 8 9}, M = 3,返回3,当主角选择1 4 9三个书店到时候,这个距离为3.
这题一开始写了NM^2, 超时对了20%, 蒙了,然后改了改NM,30%.后来想想N*logM应该可以但是当时应该没时间写,不知道是不是最后结果。我的想法就dp,没想到线性的。
2
对于一个字符串所有从0开始的子序列,判断在整个数组中出现次数。不考虑重复,比如在数列“aaaaa”中,“aa”出现两次。
例子,输入“abab”,子数列有"a"“ab”“aba”“abab”,共出现2+2+1+1=6次
这个反而我觉得不可能过结果一交过了……
代码块大概长这样
int result = 0;
for (int i = 0; i < s.size(); i++)
{
for(int j = 0; j + i < s.size(); j++)
{
if(s[j] == s[j+i]) result++;
}
}
这个方法我想了一下应该是有问题的……因为这样算的话在“aaaaa”中“aa”应该出现了四次……不知道是不是给的样例没有测到这种情况orz