美文网首页
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