算法需求:傳入一個二維數組。將二維數組中 3個連續的數組成一個新的二維數組 a,將不符合要求的數組成一個新的一維數組 b,返回 a,b。php
aa = [[11,12,13,13,17,15,16,17],[23,23,24]] // //計算分離 // //結果 a = [[11,12,13],[15,16,17]] b = [13,17,23,23,24]
沒有想到這個邏輯的使用場景,看了Python的寫法 以爲挺有意思的,就試了試。python
貼上羣裏dalao的Python代碼算法
def test(a): b = [] flag = 0 for i in a: if len(a) > 2: if a[flag] in a and a[flag] + 1 in a and a[flag] + 2 in a: n1 = a[flag] n2 = a[flag] + 1 n3 = a[flag] + 2 a.remove(n1) a.remove(n2) a.remove(n3) b.append([n1, n2, n3]) # print b else: flag += 1 return b, a
如下是我用php實現的代碼數組
//$aa = [[11,12,13,13,17,15,16,17],[23,23,24]]; $aa = [[1,2],[21,22]] ; function get_between_arr($array){ list($num_1) = $array; if(!is_array($num_1) || count($array)<=0){ return '必須傳入二維數組且數組不能爲空'; } $list = []; foreach($array as $k=>$v){ $list = array_merge($list,$v); } if(empty($list)){ return '基礎數組爲空'; } sort($list); $a = $b = []; while(isset($list[0])){ if(count($list)<=2){ $b = array_merge($list,$b); array_splice($list,0,2); return [$a,$b]; } if($list[0]+1==$list[1]&&$list[0]+2==$list[2]){ $a[] = [$list[0],$list[1],$list[2]]; array_splice($list,0,3); }else{ $b[] = $list[0]; array_splice($list,0,1); } } return [$a,$b]; } $result = get_between_arr($aa); var_dump($result);
之因此說「不是算法的算法」,是由於徹底不知道它的使用場景在哪裏,還有就是 個人代碼有點渣,目前只是實現需求。app
05/17code
終於知道了算法的應用場景。。。。rem