zoukankan      html  css  js  c++  java
  • [Swift]LeetCode643. 子数组最大平均数 I | Maximum Average Subarray I

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10479879.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Given an array consisting of n integers, find the contiguous subarray of given length k that has the maximum average value. And you need to output the maximum average value.

    Example 1:

    Input: [1,12,-5,-6,50,3], k = 4
    Output: 12.75
    Explanation: Maximum average is (12-5-6+50)/4 = 51/4 = 12.75 

    Note:

    1. 1 <= k <= n <= 30,000.
    2. Elements of the given array will be in the range [-10,000, 10,000].

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

    示例 1:

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

    注意:

    1. 1 <= k <= n <= 30,000。
    2. 所给数据范围 [-10,000,10,000]。

    Runtime: 1000 ms
    Memory Usage: 20.1 MB
     1 class Solution {
     2     func findMaxAverage(_ nums: [Int], _ k: Int) -> Double {
     3         var arr = nums[0..<k]
     4         var sum:Int = arr.reduce(0,+)
     5         var res:Int = sum
     6         for i in k..<nums.count
     7         {
     8             sum += nums[i] - nums[i - k]
     9             res = max(res, sum)
    10         }
    11         return Double(res) / Double(k)
    12     }
    13 }

    1016ms

     1 class Solution {
     2     func findMaxAverage(_ nums: [Int], _ k: Int) -> Double {
     3         let count = nums.count
     4         var nums = nums
     5         var maxKTotal = 0
     6         
     7         for index in 0..<count {
     8             nums[index] += index > 0 ? nums[index - 1] : 0
     9             if index + 1 == k {
    10                 maxKTotal = nums[index]
    11             } else if index + 1 > k {
    12                 maxKTotal = max(maxKTotal, nums[index] - nums[index - k])
    13             }
    14         }
    15         return Double(maxKTotal) / Double(k)
    16     }
    17 }

    1148ms

     1 class Solution {
     2     func findMaxAverage(_ nums: [Int], _ k: Int) -> Double {
     3         var maxSum = Int.min
     4         var current = 0
     5         
     6         for i in 0 ..< nums.count {
     7             if i < k {
     8                 current += nums[i]
     9             } else {
    10                 maxSum = max(current, maxSum)
    11                 current += nums[i] - nums[i - k]
    12             }
    13         }
    14         maxSum = max(current, maxSum)
    15         return Double(maxSum) / Double(k)
    16     }
    17 }

    1168ms

     1 class Solution {
     2     func findMaxAverage(_ nums: [Int], _ k: Int) -> Double {
     3         if (nums.count <= k) {
     4             return Double(nums.reduce(0,+))/Double(k)
     5         }
     6         
     7         var prev = nums[0..<k].reduce(0,+); var prevMax = prev
     8         for index in k..<nums.count {
     9             let tmp = nums[index] - nums[index-k] + prev
    10             prev = tmp
    11             prevMax = max(prevMax,tmp)
    12         }        
    13         return Double(prevMax)/Double(k)
    14     }
    15 }

    1560ms

     1 lass Solution {
     2     func findMaxAverage(_ nums: [Int], _ k: Int) -> Double {
     3         var i = 0
     4         var sum = 0
     5         var temp = 0
     6         for item in nums {
     7             sum += item
     8             if i < k {
     9                 temp = sum
    10             } else {
    11                 sum -= nums[i-k]
    12                 if temp < sum {
    13                     temp = sum
    14                 }
    15             }
    16             i += 1
    17         }
    18         
    19         return Double(temp)/Double(k)
    20     }
    21 }

    1736ms

     1 class Solution {
     2     func findMaxAverage(_ nums: [Int], _ k: Int) -> Double {
     3         guard nums.count >= k else {
     4             return 0.0
     5         }
     6         var sum = 0
     7         var m = 0
     8         for i in 0..<k {
     9             sum += nums[i]
    10         }
    11         m = sum
    12         for j in k..<nums.count {
    13             sum -= nums[j-k]
    14             sum += nums[j]
    15             m = max(m, sum)
    16         }
    17         return Double(m)/Double(k)
    18     }
    19 }
  • 相关阅读:
    RTP 控制协议
    非关系型数据库
    关系型数据库
    处理海量数据
    处理大并发
    C++ 模板偏特化-来自STL的思考
    C++详解new/delete
    二分算法来相会
    计算机网络知识点总结
    C++字符串类型转换
  • 原文地址:https://www.cnblogs.com/strengthen/p/10479879.html
Copyright © 2011-2022 走看看