好久没有刷LeetCode了,准备重拾并坚持下去,每天刷个两小时。今天算是开始的第一天,不过出师不利,在一道很简单的题目上墨迹半天。不过还好,现在踩过的坑,应该都不会白踩,这些可能都是以后程序员路上稳固的基石哦。任何优秀的程序员不都是这样过来的嘛,坚持就好。

注意:大家练习时同样要注意代码的风格,这一点推荐上lintcode测试一下,练习几次风格自然就好了。

下面开始写第一题的解题过程(包括写错的过程)

思路一:累加数组

1. 求出数组的累加数组(循环遍历,每一项等于前一项的和)
2. k个数的和等于 i 位置上的数减去 i - k 位置上的数(对于坐标比较迷糊的同学,推荐你们在稿纸上画画就明白了)。

第一遍错误的代码(黄色标记处错误):

 1 public class Solution {
 2     public double findMaxAverage(int[] nums, int k) {
 3         if (nums == null || nums.length < 1) {
 4             return -1;
 5         }
 6         int[] ans = new int[nums.length];
 7         double maxSum = 0;
 8         ans[0] = nums[0];
 9         for (int i = 1; i < nums.length; i++) {
10             ans[i] = nums[i] + nums[i - 1];
11         }
12         maxSum = ans[k - 1];
13         for (int i = k; i < nums.length; i++) {
14             double curSum = (double)ans[i] - ans[i - k];
15             if (curSum > maxSum) {
16                 maxSum = curSum;
17             }else {
18                 continue;
19             }
20         }
21         return maxSum / k;
22     }
23 }

nums改成ans就正确了。

时间复杂度:O(n)只是两遍遍历,没有嵌套。

空间复杂度:O(n)申请了一个数组

思路二:滑动窗口

维护一个“和”数组,只有k个元素,从k+1开始,每次右边加一个元素,左边减一个元素。

相比一的好处:不用申请数组了,而且效率也高了,减少了重复计算。

这次终于BugFree了,不容易啊。

 1 public class Solution {
 2     public double findMaxAverage(int[] nums, int k) {
 3         if (nums.length < 1 || nums == null) {
 4             return -1;
 5         }
 6         int sum = 0;
 7         int max = 0;
 8         for (int i = 0; i < k; i++) {
 9             sum += nums[i];// 先求前k个数的和,之后不断维护这个数组即可。
10             max = sum;
11         }
12         for (int i = k; i < nums.length; i++) {
13             sum += nums[i] - nums[i - k];
14             if (sum > max) {
15                 max = sum;
16             }
17         }
18         return max * 1.0 / k;
19     }
20 }

时间复杂度:O(n)只是遍历一遍

空间复杂度:O(1)

转载于:https://www.cnblogs.com/StoneLuo/p/7376076.html

【LeetCode】数组-1(643)-返回规定长度k的最大子数组的平均数相关推荐

  1. LeetCode 1708. 长度为 K 的最大子数组

    文章目录 1. 题目 2. 解题 1. 题目 在数组 A 和数组 B 中,对于第一个满足 A[i] != B[i] 的索引 i ,当 A[i] > B[i] 时,数组 A 大于数组 B. 例如, ...

  2. 《LeetCode力扣练习》第53题 最大子数组和 Java

    <LeetCode力扣练习>第53题 最大子数组和 Java 一.资源 题目: 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. ...

  3. 和至少为k的最短子数组 python_和至少为k的最短子数组

    // 单调栈 // 维护一个具有栈单调性的队列,跟动态规划不一样的是时间复杂度为O(n) // queue[i]中存放着前缀和 // 我们知道因为负数的存在,所以队列不是单调增长的,但是不单调的其实对 ...

  4. leetcode 974. Subarray Sums Divisible by K

    974. Subarray Sums Divisible by K 题意:给你一个数组A和一个数K,求改数组有多少连续子序列的和能被K整除. 思路:简单DP.假设sum[i]表示[0-i]的求和,那么 ...

  5. OI基础系列之最大子数组问题

    OI基础系列之最大子数组问题   --Edward2414    oi退役了,虽然没取得多少成绩,也算是走过一会的人了.我相信绝大多数oi党都是自学成才,在此,我感谢那些把自己所学写到博客里的前辈们, ...

  6. 动态规划套路:最大子数组和

    动态规划套路:最大子数组和 文章目录 动态规划套路:最大子数组和 一.题目描述 二.分析 一.题目描述 这次看一个简答的题: 二.分析 这道题比较简单,主要是回顾动态 规划的解法! 其实第一次看到这道 ...

  7. 结对项目——最大子数组

    求数组中最大子数组的和 一.程序要求 1.返回一个整数数组中最大子数组的和: 2.输入一个整数数组,数组中有正数也有负数: 3.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 4.求 ...

  8. 结对项目——可循环的最大子数组

    求循环数组的最大子数组的和 一.程序要求 1.输入一个整数数组,数组中有正数也有负数: 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 3.如果数组A[0].......A[j- ...

  9. es6 取数组的第一个和最后一个_es6常用数组操作及技巧汇总

    定义数组 const array = [1, 2, 3]; 或者 const array = new Array(); array[0] = '1'; 建议尽量使用第一种形式定义数组,采用new的形式 ...

  10. [Jobdu] 题目1527:首尾相连数组的最大子数组和

    题目描述: 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],-arr ...

最新文章

  1. easyui的datagrid的使用记录
  2. 在Android Studio上进行OpenCV 3.1开发
  3. ASP.NET中MVC默认模板的项目结构
  4. 信号模型噪声服从零均值高斯分布_非高斯噪声下基于分数低阶循环谱的调制识别方法...
  5. QML工作笔记-PC端和Android端布局错位问题
  6. JWT/JJWT JSON WEB TOKEN介绍和使用
  7. 2013.检测正方形-LeetCode
  8. Xlib: connection to :0.0 refused by server解决方法
  9. Opencv之获取边缘和画轮廓
  10. 熊猫烧香delphi编写免费源代码
  11. Python - 批量修改文件夹名称
  12. 最详细AMD Ryzen CPU,VMware安装macOS(虚拟机安装黑苹果)文章索引
  13. 模拟卷Leetcode【普通】015. 三数之和
  14. 用什么擦地最干净脑筋急转弯_你没想过的“脑筋急转弯”,才是启发孩子智力的法宝(附资源下载)...
  15. 怎么屏蔽还有照片_在朋友圈发男神照片没屏蔽父母,老妈的回应亮了
  16. ionic 环境搭建,运行项目到浏览器,android手机,模拟器
  17. unity零基础开始学习做游戏(四)biu~biu~biu发射子弹打飞机
  18. jquery获取元素下面的所有指定元素
  19. CCD工业相机电脑连接正常但无法采集图像的相关设置
  20. 树莓派挂载和卸载U盘或移动硬盘

热门文章

  1. 用户权限框架php,ThinkPHP5ACL用户权限模块用法详解
  2. Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 nacos
  3. easyui 1.4.3 窗口创建或拖动超过父元素 边界 BUG 解决方法
  4. Eureka-Client 注册服务到 Eureka-Server
  5. ES6深入浅出-1 新版变量声明:let 和 const-1.视频 概述
  6. 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_08.RequestMapping注解的作用
  7. LoRa无线技术介绍
  8. DRF + react 实现TodoList
  9. json文件_ajax
  10. 局域网访问PHP项目网站 用IP地址进入