阿里20/5/25校招笔试题

两道编程题。

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

你可能感兴趣的:(杂文)