开发者社区> 问答> 正文

使用大数组找到最大平均值测试失败

问:给定n个整数,找到具有最大平均值和长度k的连续子数组,并输出最大平均值。

输入:[1,12,-5,-6,50,3],k = 4 输出:12.75 例如:maxAvr(12-5-6 + 50)/ 4 = 51/4 = 12.75

class Solution { public double findMaxAverage(int[] nums, int k) { double[] f = new double[nums.length];//save the max value f[i] with range k from nums[] int length = nums.length; int sum = 0; for (int i = 0; i < k; i++) { sum += nums[i]; } if (length == k) { return ((double) sum / k); } f[k - 1] = (double)sum; // start at f[k-1] for (int i = k - 1; i < length - 1; i++) { f[i + 1] = f[i] - nums[i - k + 1] + nums[i + 1]; // with dp to find the maxValue in the range k } Arrays.sort(f); return (double) f[length - 1] / (double) k; } } 调试

Answer错误的答案 ✘测试案例:大型数组,包含6514个项目 passed 118/123起案件通过(不适用) ✘答案: ✘标准输出:“ 0.0” 当我调试时,我发现idea.sh无法解决大数组

展开
收起
小六码奴 2019-10-03 19:35:44 713 0
1 条回答
写回答
取消 提交回答
  • Arrays.sort()花费了很多时间,所以我使用了另一种方法!

    class Solution { public double findMaxAverage(int[] nums, int k) { double[] f = new double[nums.length]; int length = nums.length; int sum = 0; double pre = 0; for (int i = 0; i < k; i++) { sum += nums[i]; } if (length == k) { return ((double) sum / k); } f[k - 1] = (double)sum; pre = f[k-1]; // save the max value for (int i = k - 1; i < length -1; i++) { f[i + 1] = f[i] - nums[i - k + 1] + nums[i + 1]; if(f[i+1]>pre){ pre = f[i+1]; // exchange the max value } } // Arrays.sort(f); // waste much time! return (double) pre / (double) k; } }

    2019-10-09 15:37:02
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
移动互联网测试到质量的转变 立即下载
给ITer的技术实战进阶课-阿里CIO学院独家教材(四) 立即下载
F2etest — 多浏览器兼容性测试整体解决方案 立即下载