剑指Offer:扑克的顺子

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看出任意数字。

      大、小王是特殊的数字,我们不妨把它 们都定义为 0,这样就能和其他扑克牌区分开来了。

      判断 5 个数字是不是连续的,最简单的方法是把数组排序。由于 0 可以当成任意数字,我们可以用 0 去补满数组中的间隔(1和3之间间隔2,空1个数)。如果排序之后的数组不是连续的,即相邻的两个数字相隔若干个数字,但只要我们有足够的。可以补满这两个数字的空缺,这个数组实际上还是连续的。举个例子,数组排序之后为{0,1,3,4,5},在 1和 3 之间空缺了一个 2,刚好我们有一个 0,也就是我们可以把它当成 2 去填补这个主缺。

      我们需要留意的是如果数组中有2个或2个以上非0数字相同,那么一定不是连续的。

实现代码:

private static boolean isContinue(int[] nums){
	if(nums==null||nums.length==0){
		return false;
	}
	int zeros=0;
	int gaps=0;
	//第一步,将数组排序
	Arrays.sort(nums);
	//第二步:统计数组中0的个数
	for(int i=0;i=gaps?true:false;
}

你可能感兴趣的:(算法,剑指Offer,Java实现)