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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章