多种产品中求最大连续次数和它所对应的产品名
同学们,大家好。昨天说了最高连胜次数的算法。今天再来升级一下问题,假如有多种产品(具体多少种甚至你自己也不知道),然后求最大连续次数以及最大连续次数所对应的是哪些产品。
我简单模拟一个数据,如下图所示。A列是多种产品,求最大连续次数,以及最大连续次数对应的产品名。已经设置了条件格式,方便大家查看。这里我只返回第一个符合条件的产品名,如果要返回多个产品名,可以用万金油,大家到时可以自己研究下。

首先,我们来求最大连续次数,在C2单元格输入公式=MAX(FREQUENCY(ROW(2:11),(A2:A11<>A3:A12)*ROW(2:11))),完成。
我们用的还是frequency这个函数,可见它的作用之强大。关键的地方是frequency的第2参数(A2:A11<>A3:A12)*ROW(2:11)用了一个错位的比较,也就是用当前行和下一行进行比较,如果不相等返回对应的行号,否则返回0。如下图所示,B列是错位比较的结果,它之后会按我画的红色框进行分组,true分成一组,false到true分成一组。个数最多的那一组就是我们要查询的产品,它的个数就是最大连续次数。

第2参数(A2:A11<>A3:A12)*ROW(2:11)返回的值为{2;3;4;5;6;0;0;9;0;11},第1参数ROW(2:11)返回的值为{2;3;4;5;6;7;8;9;10;11}。frequency返回的结果为{1;1;1;1;1;0;0;3;0;2;0},大家可以参考下图。最后用max取出最大值就是最大连续次数。

最大连续次数算出后,它对应的产品就好求了。在D2单元格输入公式=INDEX(A2:A11,MATCH(MAX(FREQUENCY(ROW(2:11),(A2:A11<>A3:A12)*ROW(2:11))),FREQUENCY(ROW(2:11),(A2:A11<>A3:A12)*ROW(2:11)),)),完成。别看这个公式很长,其实很简单,就是frequency重复用了2次。
还是看上面那张带箭头的图,我们就是在E列中查找出最大值3的位置,然后返回A列对应的产品D。就是一个查找的问题,这里用的是index+match的组合。但是这个公式只能返回第一个最大值对应的产品,如果要返回所有最大值对应的产品,可以用万金油的套路,留给大家自己完成了。
frequency这个函数快说了一周了,明天再说最后一天就完事了。我也快没有说的内容了,大家看的也比较少,确实是有点难。希望大家有问题可以加群提问,也给我提供点写文章的素材。
链接:
https://pan.baidu.com/s/1XFpwY4oOPQ-7Jv2hr7DVvQ
提取码:9vwr