背景
在一次技术面试中,我被要求用JavaScript实现一个缺失的算法。面试官提供了一些代码和18个失败的单元测试,一旦成功实现算法,这些测试就会通过。我相信有更有效率的解决方法,因为我在规定时间内尝试了几种不同的方法。这是我首先想到的解决方案,虽然对于技术测试来说足够,但我想知道更好的解决方法。
问题
判断扑克牌手中的牌是否形成顺子。(我已经按升序排序了手中的牌。)
我的解决方案
PokerHand.prototype._check_straight_function = function(arr) {
var isStraight = false;
for (var j = i = 4; i >= 0 && j > 1; i--)
if (arr[i].value() - 1 == arr[--j].value()) {
isStraight = true;
} else {
isStraight = false;
}
};
return isStraight;
};
其他方法
有些我没有实现的方法,我认为可能会更快。如果有人能够向我演示下面某个方法的工作版本,并帮助我理解哪种方法最快,我将不胜感激。
- 递归使用
arr.pop().value - 1 == arr.pop().value()
过滤
数组以创建一个只包含下一个索引(arr[++i]
)是当前索引+1的值的新数组,然后看新数组的长度是否相同。- 使用
for循环
和break / continue
来尽早中断顺子。