找出数组子集中含有两个数个数相同的最大子集

现有数组A, 给出两个数字P1, P2
要求数组A中包含P1,P2个数相同的最大子集
比如A= {1, 6, 7, 42, 7, 15, 4, 8}, P1=7, P2=42
子集{1,6} 含有0个P1和0个P2, {1,6,7,42} 和 {42,7,15,4,8}都含有1个P1和1个P2
所以最大的子集是{42,7,15,4,8}

求写出一个算法。

这个用循环判断下就可以了

我一开始以为最大子集肯定要么起始于左边要么起始于右边,所以得到N(P1)-N(P2)或者N(P2)-N(P1),然后回退掉多的个数就能得到子集
但是后来想到一个反例:
A= {7,6,42,7,15,4,8,7},P1=7,P2=42, 最大子集应该是{6,42,7,15,4,8,7},去掉两边的7
然后还有这个更特别的例子:
A= {7,1,1,1,1,1,7,6,42,15,4,8,7,7,42,7},P1=7,P2=42, 最大子集应该是{1,1,1,1,1,7,6,42,15,4,8}, 去掉左侧的7,右侧的7,7,42,7,
N(P1)=5, N(P2)=2 差3,但是实际回退了4个7和1个42

你能写出完整代码涵盖以上各种情况吗?