LeetCode算法题-Maximum Average Subarray I(Java实现)
这是悦乐书的第278次升级,第294篇原创
01 看题和准备
今天详情的是LeetCode算法题中Easy级别的第146题(顺位题号是643)。给定由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]范围内。
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 第一种解法
由于是取连续的子数组,所以不需要对数组进行排序。我们可以先使用一个数组sum,长度与nums一致,将nums中的元素累加的和存起来,而后再去算k个元素之和时,使用sum中的元素做减法,找出其中的最大值,最后算出平均数就可。
public double findMaxAverage(int[] nums, int k) { // 存放数组元素之和 int[] sum = new int[nums.length]; // 第一位就是数组的第一个元素 sum[0] = nums[0]; for (int i=1; i<nums.length; i++) { // 从第二位开始,前i个元素之和为sum中的前一个元素与数组的当前元素 sum[i] = sum[i-1] + nums[i]; } // 第k-1位,就是nums中0到k位元素之和 double result = sum[k-1]*1.0/k; for (int i=k; i<nums.length; i++) { // 计算平均值,找出最大值 result = Math.max(result, (sum[i]-sum[i-k])*1.0/k); } return result;}
03 第二种解法
针对上面第一种解法,我们其实也没必要把每组元素的和存起来,只要要存一组k个元素之和就可。而后再计算其余组k个元素时,去掉前面k个元素的头部元素,并且在尾部加上新的元素,就变成了新的一组k个元素之和,就像滑动的窗户一样,窗口大小不变,首尾元素做升级。
public double findMaxAverage(int[] nums, int k) { double sum = 0; // 先求出前k个元素之和 for (int i=0; i<k; i++) { sum += nums[i]; } // 将最开始的k歌元素之和赋值给result double result = sum; for (int i=k; i<nums.length; i++) { // 减去sum的左边元素,加上右边元素,变成1到k+1位元素之和 sum += nums[i]-nums[i-k]; // 比较大小,取最大 result = Math.max(result, sum); } return result/k;}
04 小结
算法专题目前已日更超过四个月,算法题文章146+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是一律内容,假如大家有什么好的解法思路、建议或者者其余问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » LeetCode算法题-Maximum Average Subarray I(Java实现)
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » LeetCode算法题-Maximum Average Subarray I(Java实现)