1. 程式人生 > >Leetcode PHP題解--D98 697. Degree of an Array

Leetcode PHP題解--D98 697. Degree of an Array

題目分析

返回出現次數最多的元素的鍵差最小的值。

思路

先用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%的提交。故肯定是有更優解的。

若覺得本文章對你有用,歡迎用