阿里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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值