Leetcode PHP題解--D98 697. Degree of an Array
阿新 • • 發佈:2019-07-07
題目分析
返回出現次數最多的元素的鍵差最小的值。
思路
先用array_count_values計算元素出現次數,用arsort排序。
再遍歷該陣列,記錄第一個元素的值。用以記錄最大值。
獲取當前遍歷元素在原陣列中的最小下標和最大下標。其差值為所求數。
最後返回最小的該數即可。
最終程式碼
<?php class Solution { /** * @param Integer[] $nums * @return Integer */ function findShortestSubArray($nums) { $elementCount = array_count_values($nums); $revNums = array_reverse($nums); $numAmounts = count($nums); arsort($elementCount); $minLength = 50000; $maxValue = key($elementCount); $maxAmount = current($elementCount); foreach($elementCount as $elk => $elv){ if($elv<$maxAmount){ break; } $left = array_search($elk, $nums); $right = $numAmounts - array_search($elk, $revNums)-1; if($right-$left+1 <$minLength){ $minLength = $right-$left+1; } }; return $minLength; } }
本程式碼執行時間只超過了20%的提交。故肯定是有更優解的。