给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
例如:
输入:[1,12,-5,-6,50,3], k = 4
输出:12.75
解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
解题思路:
双指针
典型的滑动窗口, 双指针问题
设置初始结束指针, 不断平移查找最大即可
未翻译版
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 算法合集地址
网友评论