返回出現次數最多的元素的鍵差最小的值。數組
先用array_count_values計算元素出現次數,用arsort排序。.net
再遍歷該數組,記錄第一個元素的值。用以記錄最大值。code
獲取當前遍歷元素在原數組中的最小下標和最大下標。其差值爲所求數。排序
最後返回最小的該數便可。element
<?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%的提交。故確定是有更優解的。get
若以爲本文章對你有用,歡迎用愛發電資助。io