题目解析
本题我的解题思路分为两步:
- 求出对手的牌
- 基于对手的牌,求最长顺子
首先,对手的牌 = 总牌 - 我的牌 - 已打出的牌
这里主要难点在于,如何记录牌面对应的牌数量。我的思路是:
定义一个数组count,将数组count的索引和牌面关联(定义一个字典mapToV),数组count的元素值就是对应牌面的数量。
这样可以得出一个数组:
// count每个索引值对应一个牌面值,count元素值就是对应牌面的数量
// 牌面值 3 4 5 6 7 8 9 10 J Q K A 2 B C
// 索引值 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
int[] count = {0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 1, 1};
然后,就可以很简单的完成:对手的牌 = 总牌 - 我的牌 - 已打出的牌
比如用例1,对手的牌就可以表示为:
int[] count = {0, 0, 0, 1, 1, 2, 2, 0, 3, 3, 3, 3, 3, 3, 3, 0, 4, 1, 1};
接下来我们可以定义一个 L 指针,作为顺子的左边界,L指针的运动范围是count数组的索引3~索引10

已下架不支持订阅
2322

被折叠的 条评论
为什么被折叠?



