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

D98 697. Degree of an Array

題目連接

697. Degree of an Arrayphp

題目分析

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

思路

先用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

相關文章
相關標籤/搜索