php或js取出數字組合中,個數最多或最長的連續數字序列,比如1,2,5,6,7,8,則取出5,6,7,8

比如鬥地主撲克牌中,有打連對的牌型. 比如可以出334455,或者 55667788,在玩家點擊出牌提示的,我們要給他最長的一個連對提示.這時,就需要把手裏的牌型轉化爲連續的數字編號.首先要先找出所有的對子組合.然後把每個對子對應的唯一編號放在整個數組中.然後再對其按是否連續進行分組.比如3,4一組,5一組,7一組,11,12,13,14爲一組.

PHP版本

//所有的對子找到後,找出他們對應的數字編號,放數組中,如下
$data = array(2,3,6,7,8,12,14,16,17,18,19,20);
$j = 0;
$array[$j][] = $data[0];//建立一個臨時多維數組
for($i = 1; $i<count($data); $i++){
if(($data[$i]-$data[$i-1]==1)){//-1表示判斷兩數據差值是否爲1,步長爲1就是連續的,
//如果1修改爲2,應該能找到2468這種連續的數字.
$array[$j][] = $data[$i];
}else{
$j++;
$array[$j][] = $data[$i];
}
}
foreach($array as $vv){
	$array2[]=count($vv);//對新數組中的子數組的元素個數進行統計
}
arsort($array2);//對關聯數組進行降序排列
$first_key = key($array2);//第一個元素最大,連對自然最長,把數組鍵名取出
$array3=$array[$first_key];//根據鍵名得到想要的最長的子數組

print_r($array3);exit;

JS(TS)版本

			var temp_array1:number[] =new Array(12,13,14,1,2,3,5,7,8,11);
			temp_array1.sort((function (x,y) {
            return x-y;
        }));//先升序
     //  console.log("temp_array1 "+JSON.stringify(temp_array1));
                    

var temp_array3:number[]=new Array();
var temp_array4:number[]=new Array();


var j = 0;
let temp_array2 : Array<Array<number>> = new Array<Array<number>>();//定義二維數組
temp_array2.push([]); //向數組中插入一個空數組,變成二維數組
temp_array2[j][0]=temp_array1[0];
for(i = 1; i<temp_array1.length;++i){
if((temp_array1[i]-temp_array1[i-1]==1)){
temp_array2[j].push(temp_array1[i]); 
//console.log("temp_array2 "+JSON.stringify(temp_array2));
}else{
j++;
if(!temp_array2[j]){
	temp_array2.push([]);
}

temp_array2[j].push(temp_array1[i]); //向數組中插入一個空數組,變成二維數組
//console.log("temp_array2 "+JSON.stringify(temp_array2));
}

}
//temp_array2的結果類似 [[1,2,3] , [5] , [7,8], [11,12,13,14]  ] 
//取出第一個元素的下標鍵名
 for(var i2=temp_array2.length-1;i2>=0;--i2){
         temp_array3[i2]=temp_array2[i2].length;// temp_array3爲 temp_array2的子元素的元素個數值.組成的新數組

 }	
 
//console.log("temp_array3 原來的值 "+JSON.stringify(temp_array3));	

var keys:any[]=Object.keys(temp_array3);
//console.log(keys);//類似結果爲 [3,1,2,4]
keys.sort(function(a, b){
return temp_array3[b]-temp_array3[a];});//降序排序,最大的放前面,表示最長的子數數組對應的下標
//console.log(keys);
var tmp_key=keys[0];//爲'3' 即temp_array2的最後一個[11,12,13,14] 最長
// console.log("tmp_key "+JSON.stringify(tmp_key));
temp_array4=temp_array2[tmp_key];//temp_array4即得到的最長的一串數字即temp_array2[3]=[11,12,13,14]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章