①英文题目

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 <= k <= n <= 30,000.
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 <= k <= n <= 30,000。
所给数据范围 [-10,000,10,000]。

③思路

就是个遍历,去k长度的窗口加和求平均,再滑动这个k长度窗口一步。我自己的思路写出来的代码,太慢了,约1300ms的速度。

④我自己的代码(1300ms级速度)

 class Solution {
public double findMaxAverage(int[] nums, int k) {
double sum=0;
double result=0;
double[] aver=new double[nums.length-k+1];
for(int i=0;i<=nums.length-k;i++){
for(int j=i;j<i+k;j++){
sum+=nums[j];
}
aver[i]=sum/k;
sum=0;
}
Arrays.sort(aver);
result =aver[nums.length-k];
return result;
}
}

⑤看了别人的代码之后,照着ta的思路改了之后,速度是4ms

 class Solution {
public double findMaxAverage(int[] nums, int k) {
double sum=0;
double result=0;
double[] aver=new double[nums.length-k+1];
double max=-10000;
for(int i=0;i<k;i++){
sum=sum+nums[i];
result=sum/k;
}
for(int i=1;i<=nums.length-k;i++){
sum=sum-nums[i-1]+nums[i+k-1];
if((sum/k)>result)
result=sum/k;
} return result;
}
}

ta比我更先进的思路在于,减少了加法的次数。比如,我每次都要把k窗口里的所有元素加一遍,而它是在上一次k窗口的加和的基础上,减去首部,再在尾部的下一个元素加进来。

比如

比如 [1,2,3,4,5,6] k=4

temp1 = 1+2+3+4

temp2 = temp1+5-1

⑥笔记:1、java里,Math.max只是用于求两个数中的较大值,而不是求一个数组里的最大值。同理min。

2、Array.sort()函数内部使用的是快排,结果是在原数组的基础上,变成一个升序,比如

Array.sort(arr);

让arr变成升序了。

最新文章

  1. docker好文收藏
  2. Python爬虫库Scrapy入门1--爬取当当网商品数据
  3. Queue 先进先出队列的操作
  4. hdoj-2031
  5. 如何删除已上线的IAP项
  6. 转: ES6异步编程:Generator 函数的含义与用法
  7. eval函数的用法
  8. Error:dojo.data.ItemFileWriteStore:Invalid item argument
  9. linux杀死进程的简单讲解
  10. [Swift]LeetCode817. 链表组件 | Linked List Components
  11. Java读取Excel指定列的数据详细教程和注意事项
  12. 2018.5.4 Unix的五种IO模型
  13. vue操作的填坑之旅
  14. codevs 1191 数轴染色 区间更新加延迟标记
  15. 杀戮天使(Angels of Death)无删减版 高清下载
  16. 目标跟踪之Lukas-Kanade光流法(转)
  17. form, table表示表格的时候有什么区别?
  18. 第二百七十四节,同源策略和跨域Ajax
  19. Linux运用一些常用命令
  20. mysql(MySQL客户端连接工具)

热门文章

  1. JDBC-第1篇-基础
  2. Python开发【第六篇】循环语句
  3. Unity3D 通过JSON查询天气
  4. 由浅入深:Python 中如何实现自动导入缺失的库?
  5. int和string的相互装换 (c++)
  6. Java编程思想——第14章 类型信息(一)
  7. 20191106-使用pyttsx对文本进行语音输出
  8. 前端技术之:常见前端Web框架
  9. 【aliyun】学java,看这里,不迷茫!1460道Java热门问题
  10. C语言I作业07