问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3728 访问。

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

输入: [1,12,-5,-6,50,3], k = 4

输出: 12.75

解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75

注意:

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


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.

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 <= k <= n <= 30,000.
Elements of the given array will be in the range [-10,000, 10,000].


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3728 访问。

public class Program {public static void Main(string[] args) {int[] nums = null;nums = new int[] { 1, 12, -5, -6, 50, 3 };var res = FindMaxAverage(nums, 4);Console.WriteLine(res);res = FindMaxAverage2(nums, 4);Console.WriteLine(res);res = FindMaxAverage3(nums, 4);Console.WriteLine(res);Console.ReadKey();}private static double FindMaxAverage(int[] nums, int k) {//暴力解法,此解法LeetCode超时未ACif(k == 0) return 0;double sum = 0, max_sum = int.MinValue;for(int i = 0; i < nums.Length && i + k <= nums.Length; i++) {sum = 0;for(int j = i; j < i + k; j++) {sum += nums[j];}max_sum = Math.Max(sum, max_sum);}return max_sum / k;}private static double FindMaxAverage2(int[] nums, int k) {//FindMaxAverage的优化解法,不必每次计算k个数字的和//把k当成一把尺子,从数组左边向右移动,尺子遮挡的部分看成和//只需用之前存的和减去数组左边移出尺子的值加上数组右边移入尺子的值即为新和if(k == 0) return 0;double sum = 0, max_sum = int.MinValue;//初始状态先计算前k个值的和for(int i = 0; i < k; i++) {sum += nums[i];max_sum = sum;}for(int i = 1; i < nums.Length && i + k <= nums.Length; i++) {//加右减左得到新和sum += nums[i + k - 1] - nums[i - 1];max_sum = Math.Max(sum, max_sum);}return max_sum / k;}private static double FindMaxAverage3(int[] nums, int k) {//一种常用的数组和的解决方案int n = nums.Length;//创建一个新的数组记录前面所有值的和,姑且称为“和数组”int[] sums = nums.Clone() as int[];//从第2个(索引为1)数字开始,记录之前所有值的和for(int i = 1; i < n; ++i) {sums[i] = sums[i - 1] + nums[i];}//定义最大值为前k个数,声明为double是为了最后可以直接返回结果而不用转换//C#或Java中,整数除以整数得到的结果还是整数,例如10 / 3 = 3,而不是 3.333333double max = sums[k - 1];//从k遍历“和数组”到最后,sums[i] - sums[i - k]为中间k个数字的和for(int i = k; i < n; ++i) {max = Math.Max(max, (double)sums[i] - sums[i - k]);}//返回最大平均数return max / k;}}

以上给出3种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3728 访问。

12.75
12.75
12.75

分析:

显而易见,FindMaxAverage的时间复杂度为:   ,FindMaxAverage2和FindMaxAverage3的时间复杂度为: 

C#LeetCode刷题之#643-子数组最大平均数 I( Maximum Average Subarray I)相关推荐

  1. 【每日一题】 643. 子数组最大平均数 I

    [每日一题] 643. 子数组最大平均数 I 避免每日太过咸鱼,一天搞定一道LeetCode算法题 一.题目描述 难度: 简单 给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大 ...

  2. Leetcode滑窗系列(java):643. 子数组最大平均数 I

    Leetcode滑窗系列(java):643. 子数组最大平均数 I(新手小白仅供参考) 题目来源 leetcode 题目描述 个人思路 创建一个滑窗,将其值的和作为作为判断基准 然后滑窗的左右边界各 ...

  3. 【LeetCode】643. 子数组最大平均数 I

    class Solution1 {/*643. 子数组最大平均数 I给你一个由 n 个元素组成的整数数组 nums 和一个整数 k .请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数 ...

  4. 643. 子数组最大平均数 I

    链接:643. 子数组最大平均数 I 题解:https://leetcode-cn.com/problems/maximum-average-subarray-i/solution/jing-dian ...

  5. leetcode算法题--连续的子数组的和

    原题链接:https://leetcode-cn.com/problems/continuous-subarray-sum/ 1.暴力 这题用暴力方法非常简单的 bool checkSubarrayS ...

  6. 【解题报告】Leecode 643. 子数组最大平均数 I——Leecode 刷题系列

    题目链接:https://leetcode-cn.com/problems/maximum-average-subarray-i/ 题解汇总:https://zhanglong.blog.csdn.n ...

  7. LeetCode 643. 子数组最大平均数 I

    1. 题目 给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数. 示例 1: 输入: [1,12,-5,-6,50,3], k = 4 输出: 12.75 解释: 最大平均 ...

  8. leetcode 643. Maximum Average Subarray I | 643. 子数组最大平均数 I(Java)

    题目 https://leetcode-cn.com/problems/maximum-average-subarray-i/ 题解 滑动窗口解法,示意图: 另外,double 计算比 int 要慢, ...

  9. leetcode 643. 子数组最大平均数 I(滑动窗口)

    给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数. 示例: 输入:[1,12,-5,-6,50,3], k = 4 输出:12.75 解释:最大平均数 (12-5-6+5 ...

  10. C#LeetCode刷题之#852-山脉数组的峰顶索引(Peak Index in a Mountain Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4003 访问. 我们把符合下列属性的数组 A 称作山脉: A.le ...

最新文章

  1. Android Retrofit实现原理分析
  2. PHP7 学习笔记(六)403 Forbidden - WAMP Server 2.5
  3. 【NLP】从整体视角了解情感分析、文本分类!
  4. Linux服务器配置秘钥对连接
  5. 10976 - Fractions Again?!
  6. 中芯国际能靠14nm工艺翻身么?
  7. ubuntu在VMware虚拟机安装了后桌面显示问题
  8. Leetcode每日一题:1356.sort-integers-by-the-number-of-1-bits(根据二进制1的个数排序)
  9. 都昌信息袁永福:利用电子病历赋能框架,为健康医疗大数据打好基础【电子病历和健康医疗大数据系列】...
  10. python-day9-函数初识-三元运算符
  11. Hanlp-地名识别调试方法详解
  12. 对话西蒙斯:解密金融模型和量化投资帝国
  13. 天线远场定义_暗室静区及天线近场和远场的介绍
  14. 1.3分布式系统架构技术选型
  15. macOS Mojave 夜神模拟器打不开解决办法
  16. 公路自行车轮市场前景分析及行业研究报告
  17. 深入探索Android卡顿优化(下)
  18. Intel的ipp库(Integrated Performance Primitives)
  19. Python爬取手机APP
  20. NX安装cuda和cudnn

热门文章

  1. LeetCode 643. Maximum Average Subarray I
  2. 作业 给计算机编号 winform
  3. Date java 1614619219
  4. 单选按钮 RadioButton 与 pannel控件
  5. django-模板语言dtl-render
  6. redis查询key的数量
  7. linx vim 文件操作 ubuntu server 软件源
  8. iOS开发之Accounts框架详解
  9. SQL Server 2008下日志清理方法
  10. Autodesk View and Data API二次开发学习指南