LeetCode刷题Medium篇int型数组,求k个连续数的最大和(滑动窗口解法)
发布日期:2021-06-30 16:19:35
浏览次数:2
分类:技术文章
本文共 1563 字,大约阅读时间需要 5 分钟。
题目
Given an array of integers of size ‘n’.Our aim is to calculate the maximum sum of ‘k’ consecutive elements in the array.Input : arr[] = {100, 200, 300, 400} k = 2Output : 700Input : arr[] = {1, 4, 2, 10, 23, 3, 1, 0, 20} k = 4 Output : 39We get maximum sum by adding subarray {4, 2, 10, 23}of size 4.Input : arr[] = {2, 3} k = 3Output : InvalidThere is no subarray of size 3 as size of wholearray is 2.
我的尝试
我想到了滑动窗口对移动,如上图所示,但是我不知道如何去计算每个窗口对和?如果窗口内部用for循环处理,岂不是不能O(n)实现了,后来看了解法,发现窗口的和值,是通过“增加-删除”实现的。比如第一个 窗口是2,3,5.计算出第一个窗口的sum。第二个窗口发生变化,增加6,减去2,在sum基础上增加6,减去2,计算出新的sum并且比较出最大的sum
解法
// Java code for // O(n) solution for finding // maximum sum of a subarray // of size k class GFG { // Returns maximum sum in // a subarray of size k. static int maxSum(int arr[], int n, int k) { // k must be greater if (n < k) { System.out.println("Invalid"); return -1; } // Compute sum of first window of size k int max_sum = 0; for (int i = 0; i < k; i++) max_sum += arr[i]; // Compute sums of remaining windows by // removing first element of previous // window and adding last element of // current window. int window_sum = max_sum; for (int i = k; i < n; i++) { window_sum += arr[i] - arr[i - k]; max_sum = Math.max(max_sum, window_sum); } return max_sum; } // Driver code public static void main(String[] args) { int arr[] = {1, 4, 2, 10, 2, 3, 1, 0, 20}; int k = 4; int n = arr.length; System.out.println(maxSum(arr, n, k)); } } // This code is contributed // by prerna saini.
转载地址:https://kerry.blog.csdn.net/article/details/83184414 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月10日 06时47分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Spring Batch 入门之 CSV-to-DB
2019-05-01
快速排序 - 学习记录
2019-05-01
日志写入数据库:Log4j2-JDBCAppender
2019-05-01
日志写入数据库:Logback-DBAppender
2019-05-01
分布式事务原理探究(一)
2019-05-01
MySQL 中基于 XA 实现的分布式事务-学习记录
2019-05-01
Java 并发学习记录之synchronized
2019-05-01
Java 并发学习记录之 wait/notify 机制
2019-05-01
Java 并发学习记录之线程间通信
2019-05-01
Java并发学习记录之volatile
2019-05-01
Docker + mysql主从配置
2019-05-01
Java集合学习之LinkedList
2019-05-01
Spring Security Oauth2 令牌增加额外信息
2019-05-01
Spring Security Oauth2 如何增加自定义授权模式
2019-05-01
logback + Kafka + logstash 集成
2019-05-01
在SpringBoot1.5.x下如何使RedisTokenStore集群化
2019-05-01
Spring Cloud Consul应用下线后,健康检查自动删除无效服务
2019-05-01
spring cloud consul 应用的多实例名的解决
2019-05-01
kafka设置某个topic的数据过期时间
2019-05-01