如何实现移除时间线中无序元素的算法?
算法需求说明
假设有一个设备记录你的生日派对,按记录顺序保存历史:
- 你的10岁生日派对
- 你的11岁生日派对
- 你的12岁生日派对
- 你的13岁生日派对
情况1:但该设备存在故障,有时会记录无效的生日(如下方第2条事件):
- 你的10岁生日派对
- 你的17岁生日派对
- 你的12岁生日派对
- 你的13岁生日派对
情况2:当然,你并非每年都举办生日派对,因此列表也可能如下所示:
- 你的10岁生日派对
- 你的11岁生日派对
- 你的12岁生日派对
- 你的14岁生日派对
显然,这是一个数字序列的算法问题。抱歉铺垫了这么多,我只是想构建一个“真实”场景,因为我的需求看起来可能有些突兀。我可以将其重新表述为:给定一个序列,我希望从最低点开始向上移动,过程中绝不向下。例如,序列[1, 2, 5, 4, 5, 8, 6, 7, 11, 9]里的5、8和11是无效元素,需要移除,处理后得到[1, 2, 4, 5, 6, 7, 9],以此满足从最低点开始向上,全程不向下的要求。
以下是该算法需要实现的几组示例:
doAlgo([]) == [] doAlgo([1]) == [1] doAlgo([1, 2]) == [1, 2] doAlgo([2, 2]) == [2, 2] doAlgo([2, 2, 1]) == [1] doAlgo([2, 1]) == [1] doAlgo([1, 3, 2]) == [1, 2] doAlgo([1, 2, 3, 4, 1]) == [1, 1] doAlgo([5, 2, 3, 4, 1]) == [1] doAlgo([5, 2, 3, 4, 1, 2]) == [1, 2] doAlgo([5, 2, 3, 4, 1, 2, 1]) == [1, 1] doAlgo([1,2,3,4,5,8,6,7,8,9]) == [1,2,3,4,5,6,7,8,9]
内容的提问来源于stack exchange,提问作者nevvermind
相关产品推荐
相关产品推荐

