IOS 算法(基礎(chǔ)篇) ----- 子數(shù)組最大平均數(shù)

給定 n 個(gè)整數(shù),找出平均數(shù)最大且長(zhǎng)度為 k 的連續(xù)子數(shù)組,并輸出該最大平均數(shù)。

例如:

輸入:[1,12,-5,-6,50,3], k = 4
輸出:12.75
解釋?zhuān)鹤畲笃骄鶖?shù) (12-5-6+50)/4 = 51/4 = 12.75

解題思路:

雙指針

典型的滑動(dòng)窗口, 雙指針問(wèn)題
設(shè)置初始結(jié)束指針, 不斷平移查找最大即可

exp1
exp2
exp3

未翻譯版

    func findMaxAverage(_ nums: [Int], _ k: Int) -> Double {

        var start = 0, end = k - 1, result = 0, last = 0
        
        for i in 0..<k {
            result += nums[i]
            last = result
        }
        
        while end < nums.count - 1 {
            
            start += 1
            end += 1
            last = last - nums[start-1] + nums[end]
            result = max(result, last)
            
        }
        
        return Double(result)/Double(k);

    }

翻譯版

    func findMaxAverage(_ nums: [Int], _ k: Int) -> Double {

        // 設(shè)置初始,結(jié)束指針(數(shù)組下標(biāo)), 返回值等
        var start = 0, end = k - 1, result = 0, last = 0
        // 得到初始的最大值
        for i in 0..<k {
            result += nums[i]
            // last用來(lái)存每次新的k元素之和, 初始設(shè)為0 ~ k-1, 元素相加之和
            last = result
        }
        // 循環(huán), 結(jié)束指針為 nums.count - 1 就結(jié)束循環(huán)
        while end < nums.count - 1 {
            // 開(kāi)始, 結(jié)束指針往后移一位, 也可理解成滑動(dòng)了一下窗口
            start += 1
            end += 1
            // last用來(lái)存每次新的k元素之和
            last = last - nums[start-1] + nums[end]
            // result取最大值
            result = max(result, last)
            
        }
        // 返回結(jié)果, /k 的操作放在最后處理就行, 結(jié)果不變
        return Double(result)/Double(k);
    }

題目來(lái)源:力扣(LeetCode) 感謝力扣爸爸 :)
IOS 算法合集地址

?著作權(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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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