阿里云笔试 算法 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
第三题有大佬可以给个解答吗![](https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553875520/B9EFCE55E6BE0AA3050FB3EE89043867)
解法(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
第三题有大佬可以给个解答吗
全部评论
相关推荐
点赞 评论 收藏
分享
01-07 15:50
四川大学 Java 点赞 评论 收藏
分享
![](https://static.nowcoder.com/head/header0005.png)
点赞 评论 收藏
分享