この記事の内容は、PHP がソートされた配列 (コード) に数値が出現する回数をカウントする方法に関するものです。一定の参考値があります。困っている友人はそれを参照できます。お役に立てば幸いです。手伝う。
ソートされた配列に数値が出現する回数を数えます。
1. 順序付けされた配列検索、バイナリ メソッドを使用します
2. 最初の出現の位置を見つけるにはバイナリ メソッド、最後の出現の位置を見つけるにはバイナリ メソッド、終了 - 開始 1
left=getLeft(data,k) right=getRight(data,k) retun right-left+1 getLeft data,k left=0 right=arr.length-1 mid=left+(right-left)/2 while left<=right if arr[mid]<k //关键 left=mid+1 else right=mid-1 mid=left+(right-left)/2 return left getRight data,k left=0 right=arr.length-1 mid=left+(right-left)/2 while left<=right if arr[mid]<=k //关键 left=mid+1 else right=mid-1 mid=left+(right-left)/2 return right
<?php function GetNumberOfK($data, $k) { $left=getLeft($data,$k); $right=getRight($data,$k); return $right-$left+1; } function getLeft($arr,$k){ $left=0; $right=count($arr)-1; $mid=intval($left+($right-$left)/2); while($left<=$right){ if($arr[$mid]>=$k){//关键 $right=$mid-1; }else{ $left=$mid+1; } $mid=intval($left+($right-$left)/2); } return $left; } function getRight($arr,$k){ $left=0; $right=count($arr)-1; $mid=intval($left+($right-$left)/2); while($left<=$right){ if($arr[$mid]<=$k){//关键 $left=$mid+1; }else{ $right=$mid-1; } $mid=intval($left+($right-$left)/2); } return $right; } $arr=array(1,2,3,4,4,4,5); $m=GetNumberOfK($arr,4); var_dump($m);
以上がPHP でソートされた配列に数値が出現する回数をカウントする方法 (コード)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。