Leetcode 697. 數(shù)組的度 Degree of an Array

【題目描述】
給定一個(gè)非空且只包含非負(fù)數(shù)的整數(shù)數(shù)組 nums, 數(shù)組的度的定義是指數(shù)組里任一元素出現(xiàn)頻數(shù)的最大值。

你的任務(wù)是找到與 nums 擁有相同大小的度的最短連續(xù)子數(shù)組,返回其長(zhǎng)度。

【示例 1】

輸入: [1, 2, 2, 3, 1]
輸出: 2
解釋: 
輸入數(shù)組的度是2,因?yàn)樵?和2的出現(xiàn)頻數(shù)最大,均為2.
連續(xù)子數(shù)組里面擁有相同度的有如下所示:
[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]
最短連續(xù)子數(shù)組[2, 2]的長(zhǎng)度為2,所以返回2.

【示例2】

輸入: [1,2,2,3,1,4,2]
輸出: 6

nums.length 在1到50,000區(qū)間范圍內(nèi)。
nums[i] 是一個(gè)在0到49,999范圍內(nèi)的整數(shù)。

【思路】
1、找到與原數(shù)組度相同的最短子數(shù)組
2、找到元素的第一次出現(xiàn)的index 和 最后一次出現(xiàn)的index
3、last-first+1 就是結(jié)果

func findShortestSubArray(_ nums: [Int]) -> Int {
    var map = [Int:Int]()
    var max = Int.min
    for num in nums {
        var value = map[num] ?? 0
        value+=1
        map[num] = value
        if max < value {
            max = value
        }
    }
    var numArr = [Int]()
    for key in map.keys {
        if map[key] == max {
            numArr.append(key)
        }
    }
    var minCount = Int.max
    for num in numArr {
        var tmpCount = max
        var firIndex = 0
        var secIndex = 0
        for i in 0..<nums.count {
            if num == nums[i] && tmpCount == max {
                firIndex = i
            }
            if num == nums[i] {
                tmpCount-=1
            }
            if num == nums[i] && tmpCount == 0 {
                secIndex = i
                break
            }
        }
        minCount = min((secIndex-firIndex+1), minCount)
    }
    return minCount
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容