阿里云笔试 算法 0917

1. 一个长度为n的数组,可以修改元素,要让每个元素不超过另一个元素的两倍,问最少操作几次

解法(A100):数组排序后,找到满足条件的最大窗口,答案就是n-窗口大小

2. 一个长度为n的数组,请问最多可以找到多少个长度为m的子序列,其中元素不超过k

解法(A100):数组排序后,指针i遍历数组,看满足条件的左边界,找到一个满足条件的窗口,此时可以找到C(窗口大小-1,m-1)种答案(组合数),累加即可

3. 一系列区间,可以合并,问合并两次后区间最大长度
没A100,第1个想法超时过22%,第2个不超时过了19%
想法1(22%超时):可以根据是否相交,构成一张无向图,遍历两次对应子节点求累加和即为相交两次的长度,时间复杂度为O(N3)
想法2(19%不超时):滑动窗口,固定首节点left,i,j依次遍历数组区间,判断left和i是否相交,如果相交判断j和left或i是否相交,如果是则计算长度;如果left和i不相交,则left+1;如果left >=i, 则continue

第三题有大佬可以给个解答吗
全部评论

相关推荐

不愿透露姓名的神秘牛友
02-12 10:05
小米集团 算法工程师 28.0k*15.0
泡沫灬一触即破:楼上那个看来是看人拿高薪,自己又不如意搁这泄愤呢是吧,看你过往评论很难不怀疑你的精神状态
点赞 评论 收藏
分享
01-07 15:50
四川大学 Java
看日出看日落:好好背八股,做算法。我身边跟你bg差不多的基本都大厂暑期
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客企业服务