美文网首页
IOS 算法(基础篇) ----- 子数组最大平均数

IOS 算法(基础篇) ----- 子数组最大平均数

作者: ShawnAlex | 来源:发表于2021-02-04 11:57 被阅读0次

给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。

例如:

输入:[1,12,-5,-6,50,3], k = 4
输出:12.75
解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75

解题思路:

双指针

典型的滑动窗口, 双指针问题
设置初始结束指针, 不断平移查找最大即可

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 {

        // 设置初始,结束指针(数组下标), 返回值等
        var start = 0, end = k - 1, result = 0, last = 0
        // 得到初始的最大值
        for i in 0..<k {
            result += nums[i]
            // last用来存每次新的k元素之和, 初始设为0 ~ k-1, 元素相加之和
            last = result
        }
        // 循环, 结束指针为 nums.count - 1 就结束循环
        while end < nums.count - 1 {
            // 开始, 结束指针往后移一位, 也可理解成滑动了一下窗口
            start += 1
            end += 1
            // last用来存每次新的k元素之和
            last = last - nums[start-1] + nums[end]
            // result取最大值
            result = max(result, last)
            
        }
        // 返回结果, /k 的操作放在最后处理就行, 结果不变
        return Double(result)/Double(k);
    }

题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址

相关文章

网友评论

      本文标题:IOS 算法(基础篇) ----- 子数组最大平均数

      本文链接:https://www.haomeiwen.com/subject/iohbtltx.html