【原创】求出随机扑克牌中的最大顺子
面试题目:一副扑克牌,没有大小王,其中,2最大,A次之,3最小,顺子可以为8、9、10、J、Q、K、A,最大顺子规则为:8、9、10、J、Q、K、A比7、8、9、10、J、Q、K大,7、8、9、10、J、Q、K又比10、J、Q、K、A大,现从扑克牌中随机抽取几张,求出最大的扑克牌。
解题方案:由于A、2的特殊排序规则,将A、2变成14、15,可极大的简化解题的思路【面试题非原创,方案为原创】
$arr = array(3,4,5,5,5,7,8,8,9,10,3,12,13,14);sort($arr); // array(3,3,4,5,5,5,7,8,8,9,10,12,13,14);$temp = array();$key = 0;for($i=0; $i<count($arr); $i++){$temp[$key][] = $arr[$i];// 当中有断隔if(isset($arr[$i+1]) && $arr[$i]+1 != $arr[$i+1] && $arr[$i] != $arr[$i+1]){if(isset($temp[$key])){$temp[$key] = array_unique($temp[$key]); // 去除重复的}$key++;}}// 重新整理比较数据$new = array();foreach($temp as $k=>$v){if(isset($temp[$k+1])){if(count($temp[$k+1]) > count($temp[$k])){ // 个数不同,直接获取最大的$new = array();$new[] = $temp[$k+1];}elseif(count($temp[$k+1]) == count($temp[$k])){ // 个数相同,比较总值大小// 直接获取总值较大的一个if(isset($new[0])){if(array_sum($temp[$k+1]) > array_sum($new[0])){$new = array();$new[] = $temp[$k+1];}}else{ // 没有数值的话,则直接写入$new[] = $temp[$k+1];}}}}// 直接输出即可var_dump($new[0]); // array(7,8,9,10)