【LeetCode】数组-1(643)-返回规定长度k的最大子数组的平均数
好久没有刷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的最大子数组的平均数相关推荐
- LeetCode 1708. 长度为 K 的最大子数组
文章目录 1. 题目 2. 解题 1. 题目 在数组 A 和数组 B 中,对于第一个满足 A[i] != B[i] 的索引 i ,当 A[i] > B[i] 时,数组 A 大于数组 B. 例如, ...
- 《LeetCode力扣练习》第53题 最大子数组和 Java
<LeetCode力扣练习>第53题 最大子数组和 Java 一.资源 题目: 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. ...
- 和至少为k的最短子数组 python_和至少为k的最短子数组
// 单调栈 // 维护一个具有栈单调性的队列,跟动态规划不一样的是时间复杂度为O(n) // queue[i]中存放着前缀和 // 我们知道因为负数的存在,所以队列不是单调增长的,但是不单调的其实对 ...
- leetcode 974. Subarray Sums Divisible by K
974. Subarray Sums Divisible by K 题意:给你一个数组A和一个数K,求改数组有多少连续子序列的和能被K整除. 思路:简单DP.假设sum[i]表示[0-i]的求和,那么 ...
- OI基础系列之最大子数组问题
OI基础系列之最大子数组问题 --Edward2414 oi退役了,虽然没取得多少成绩,也算是走过一会的人了.我相信绝大多数oi党都是自学成才,在此,我感谢那些把自己所学写到博客里的前辈们, ...
- 动态规划套路:最大子数组和
动态规划套路:最大子数组和 文章目录 动态规划套路:最大子数组和 一.题目描述 二.分析 一.题目描述 这次看一个简答的题: 二.分析 这道题比较简单,主要是回顾动态 规划的解法! 其实第一次看到这道 ...
- 结对项目——最大子数组
求数组中最大子数组的和 一.程序要求 1.返回一个整数数组中最大子数组的和: 2.输入一个整数数组,数组中有正数也有负数: 3.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 4.求 ...
- 结对项目——可循环的最大子数组
求循环数组的最大子数组的和 一.程序要求 1.输入一个整数数组,数组中有正数也有负数: 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 3.如果数组A[0].......A[j- ...
- es6 取数组的第一个和最后一个_es6常用数组操作及技巧汇总
定义数组 const array = [1, 2, 3]; 或者 const array = new Array(); array[0] = '1'; 建议尽量使用第一种形式定义数组,采用new的形式 ...
- [Jobdu] 题目1527:首尾相连数组的最大子数组和
题目描述: 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],-arr ...
最新文章
- easyui的datagrid的使用记录
- 在Android Studio上进行OpenCV 3.1开发
- ASP.NET中MVC默认模板的项目结构
- 信号模型噪声服从零均值高斯分布_非高斯噪声下基于分数低阶循环谱的调制识别方法...
- QML工作笔记-PC端和Android端布局错位问题
- JWT/JJWT JSON WEB TOKEN介绍和使用
- 2013.检测正方形-LeetCode
- Xlib: connection to :0.0 refused by server解决方法
- Opencv之获取边缘和画轮廓
- 熊猫烧香delphi编写免费源代码
- Python - 批量修改文件夹名称
- 最详细AMD Ryzen CPU,VMware安装macOS(虚拟机安装黑苹果)文章索引
- 模拟卷Leetcode【普通】015. 三数之和
- 用什么擦地最干净脑筋急转弯_你没想过的“脑筋急转弯”,才是启发孩子智力的法宝(附资源下载)...
- 怎么屏蔽还有照片_在朋友圈发男神照片没屏蔽父母,老妈的回应亮了
- ionic 环境搭建,运行项目到浏览器,android手机,模拟器
- unity零基础开始学习做游戏(四)biu~biu~biu发射子弹打飞机
- jquery获取元素下面的所有指定元素
- CCD工业相机电脑连接正常但无法采集图像的相关设置
- 树莓派挂载和卸载U盘或移动硬盘
热门文章
- 用户权限框架php,ThinkPHP5ACL用户权限模块用法详解
- Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 nacos
- easyui 1.4.3 窗口创建或拖动超过父元素 边界 BUG 解决方法
- Eureka-Client 注册服务到 Eureka-Server
- ES6深入浅出-1 新版变量声明:let 和 const-1.视频 概述
- 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_08.RequestMapping注解的作用
- LoRa无线技术介绍
- DRF + react 实现TodoList
- json文件_ajax
- 局域网访问PHP项目网站 用IP地址进入