我有一组按一定顺序排列的数字。顺序很重要,需要维护。我需要找到符合条件的连续数字的最大数量。
示例:
条件:素数
输入数据:1,3,2,4,7,5,3,11,2,4,6,3,7,3,5,1,3,7,5 ,4
Answer : 8
最佳答案
此解决方案要求您知道输入的每个元素的位置 i。这不一定很容易,但现在假设一下。
首先,想象将每个值映射到列表中的索引 i,然后仅保留原始值 n 满足条件的值。那么只需找到输入中最长的连续序列即可。
首先,对于输入中的每个值,在位置 i 处,取 i 的前几位(可能是前 8 位)作为输出键。这将导致附近的值从 256 个值转到同一个 reducer 。如果原始值满足条件,则将其输出为键,将 i 作为值输出。
在每个 reducer 中,只需迭代索引并记录您看到的最长连续序列。将其发出为(开始,结束)。
最后,您将从化简器中读取所有这些值,并处理来自两个不同化简器的两个序列实际上一起运行的情况(一个在 n 处结束,下一个在 n+1 处开始)。折叠这些,然后只报告最长的长度。
这在 Spark 中也非常简单。
关于mapreduce - 使用 MapReduce 确定输入数据中的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25211954/