[PHP] 算法-统计一个数字在排序数组中出现的次数的PHP实现
|
<div class="cnblogs_code"> 1.<span style="color: #000000">有序的数组查找,使用二分法<span style="color: #0000ff">function GetNumberOfK(<span style="color: #800080">$data,<span style="color: #800080">$k<span style="color: #000000">) { <span style="color: #800080">$left=getLeft(<span style="color: #800080">$data,<span style="color: #800080">$k<span style="color: #000000">); <span style="color: #800080">$right=getRight(<span style="color: #800080">$data,<span style="color: #800080">$k<span style="color: #000000">); <span style="color: #0000ff">return <span style="color: #800080">$right-<span style="color: #800080">$left+1<span style="color: #000000">; } <span style="color: #0000ff">function getLeft(<span style="color: #800080">$arr,<span style="color: #800080">$k<span style="color: #000000">){ <span style="color: #800080">$left=0<span style="color: #000000">; <span style="color: #800080">$right=<span style="color: #008080">count(<span style="color: #800080">$arr)-1<span style="color: #000000">; <span style="color: #800080">$mid=<span style="color: #008080">intval(<span style="color: #800080">$left+(<span style="color: #800080">$right-<span style="color: #800080">$left)/2<span style="color: #000000">); <span style="color: #0000ff">while(<span style="color: #800080">$left<=<span style="color: #800080">$right<span style="color: #000000">){ <span style="color: #0000ff">if(<span style="color: #800080">$arr[<span style="color: #800080">$mid]>=<span style="color: #800080">$k){<span style="color: #008000">//<span style="color: #008000">关键 <span style="color: #800080">$right=<span style="color: #800080">$mid-1<span style="color: #000000">; }<span style="color: #0000ff">else<span style="color: #000000">{ <span style="color: #800080">$left=<span style="color: #800080">$mid+1<span style="color: #000000">; } <span style="color: #800080">$mid=<span style="color: #008080">intval(<span style="color: #800080">$left+(<span style="color: #800080">$right-<span style="color: #800080">$left)/2<span style="color: #000000">); } <span style="color: #0000ff">return <span style="color: #800080">$left<span style="color: #000000">; } <span style="color: #0000ff">function getRight(<span style="color: #800080">$arr,<span style="color: #800080">$k<span style="color: #000000">){ <span style="color: #800080">$left=0<span style="color: #000000">; <span style="color: #800080">$right=<span style="color: #008080">count(<span style="color: #800080">$arr)-1<span style="color: #000000">; <span style="color: #800080">$mid=<span style="color: #008080">intval(<span style="color: #800080">$left+(<span style="color: #800080">$right-<span style="color: #800080">$left)/2<span style="color: #000000">); <span style="color: #0000ff">while(<span style="color: #800080">$left<=<span style="color: #800080">$right<span style="color: #000000">){ <span style="color: #0000ff">if(<span style="color: #800080">$arr[<span style="color: #800080">$mid]<=<span style="color: #800080">$k){<span style="color: #008000">//<span style="color: #008000">关键 <span style="color: #800080">$left=<span style="color: #800080">$mid+1<span style="color: #000000">; }<span style="color: #0000ff">else<span style="color: #000000">{ <span style="color: #800080">$right=<span style="color: #800080">$mid-1<span style="color: #000000">; } <span style="color: #800080">$mid=<span style="color: #008080">intval(<span style="color: #800080">$left+(<span style="color: #800080">$right-<span style="color: #800080">$left)/2<span style="color: #000000">); } <span style="color: #0000ff">return <span style="color: #800080">$right<span style="color: #000000">; } <span style="color: #800080">$arr=<span style="color: #0000ff">array(1,2,3,4,5<span style="color: #000000">); <span style="color: #800080">$m=GetNumberOfK(<span style="color: #800080">$arr,4<span style="color: #000000">); <span style="color: #008080">var_dump(<span style="color: #800080">$m); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
