扑克牌顺子-不用排序,只需要boolean[5]很小的内存空间,遍历一次数组即可
扑克牌顺子
http://www.nowcoder.com/questionTerminal/762836f4d43d43ca9deb273b3de8e1f4
//解题思路 /* array数组解释:数组索引表示顺子的第几张牌,如array[1] = true表示顺子的第二张牌找到了 遍历所有数字: 1.数字为0则king++,如果king > 3直接返回true,因为有4或5个王一定能组成顺子 2.数字不为0 2.1先执行array[number % 5] == true,判断这张牌是否已经找到了或两张牌是否相差5 2.1.1是则直接返回false,因为有重复的牌或者存在两张相差5的牌都不可能组成顺子 2.1.2否则执行array[number % 5] = true表示找到了顺子的其中一张牌,缺牌数lack-- 2.2统计最大值max和最小值min,如果max - min > 4直接返回false,因为顺子的第一张牌和最后一张牌一定不会大于4 3.如果王牌数king等于缺牌数lack则返回true,否则返回false */ public boolean IsContinuous(int [] numbers) { int king = 0;//记录王牌的个数 int lack = 5;//记录缺少的牌数 int min = 14; int max = 0; boolean[] array = new boolean[5]; for (int number : numbers) { if (number == 0) { king++; if (king > 3) return true;//有4或5个王一定能组成顺子 } else { if (array[number % 5] == true) return false;//有重复的牌 else{ array[number % 5] = true; lack--; } if (number < min) min = number; else if (number > max) max = number; if (max - min > 4) return false; } } if (lack != king) return false; return true; }