面试题:扑克牌中的顺子
题目描述:从扑克牌中随机抽 5 张牌,判断是不是顺子,即这 5 张牌是不是连续的。 2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王可以看成任意的 数字。
思路:
- 1、首先我们应该关注的是大小王等特殊字符,由于可以当成任意的数字,所有当成0处理。
- 2、把数组排序,再统计数组中0的个数
- 3、统计排序之后的数组中相邻数字之间的空缺总数。
- 4、数组中的非0数字重复出现,则该数组是不连续的。
- 5、如果空缺的总数小于或者等于0的个数,那么这个数组就是连续的,反之则不连续
程序1:
import java.util.*; public class Solution { public boolean isContinuous(int [] array) { int numOf0=0; int numOf1=0; int length=array.length; if(length==0){ return false; } Arrays.sort(array); for(int i=0;i<length-1;i++){ if(array[i]==0){ numOf0++; continue; } if(array[i]==array[i+1]) return false; numOf1+=array[i+1]-array[i]-1; } if(numOf0<numOf1) return false; return true; //如果前面的return执行 则这句不执行 /*if(numOf0>=numOf1) return true; return false;*/ } }