LC-1186 连续子数组中可删除一个数的最大和
问题:
给出一个数组,求出其所有连续子数组中,和最大是多少,注意,这些子数组中,可以选择最多删除一个数。
思路:
这个题目,其实是剑指offer中面试题42:连续子数组的最大和的一个变种。不同之处在于,你找到的子数组,还可以选择删除一个。
而剑指offer里的办法,是通过从头遍历数组,计算以当前元素位置结束时的最大和,并记录各位置中最大的一个和,返回该值。
而我们这里需要处理,去掉一块后的子数组和,会不会比原来的大。
所以我们这里添加一个从尾部遍历数组,计算以当前元素位置开始时的最大和。
那么,在计算所有位置的从这结束的最大和,以及从这开始的最大和。我们只需要再比较抠掉某个元素(假设位置为i)后的最大和,从该位置的前一个(i - 1)结束的最大和 加上 从该位置的后一个(i + 1)开始的最大和,就能知道最大的子数组和。
代码:
1 class Solution { 2 public: 3 int maximumSum(vector<int>& arr) { 4 int n = arr.size(); 5 vector<int> end_here(n); 6 vector<int> start_here(n); 7 int max_sum = arr[0]; 8 end_here[0] = arr[0]; 9 for (int i = 1; i < n; i++) { 10 end_here[i] = max(arr[i], end_here[i - 1] + arr[i]); 11 max_sum = max(max_sum, end_here[i]); 12 } 13 start_here[n - 1] = arr[n - 1]; 14 for (int i = n - 2; i >= 0; i--) { 15 start_here[i] = max(arr[i], start_here[i + 1] + arr[i]); 16 } 17 for (int i = 1; i < n - 1; i++) { 18 max_sum = max(max_sum, end_here[i - 1] + start_here[i + 1]); 19 } 20 return max_sum; 21 } 22 };
转载于:https://www.cnblogs.com/leo-lzj/p/11486145.html
LC-1186 连续子数组中可删除一个数的最大和相关推荐
- php取数组中连续数,PHP实现求连续子数组最大和问题2种解决方法
本文实例讲述了PHP实现求连续子数组最大和问题2种解决方法.分享给大家供大家参考,具体如下: 问题描述 求子数组的最大和 题目描述: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整 ...
- 《剑指offer》-- 复杂链表的复制、字符串的排列、数组中出现次数超过一半的数字、连续子数组的最大和
一.复杂链表的复制: 参考牛客网的chancy:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba 1 ...
- 结对开发项目:求整数数组中连续子数组和的最大值
小组成员:安娜 王鑫楠 题目二:求整数数组中连续子数组和的最大值. 1.分析过程: 题目收到后,前五分钟设计算法,首先也想到是不是一次遍历可以解决,考虑了一下觉得难度有点大最后还是果断放弃.我刚开始的 ...
- 力扣1438——绝对差不超过限制的最长连续子数组(滑动窗口+单调队列)
题目描述(中等) 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条件 ...
- 【剑指offer-Java版】31连续子数组的最大和
连续子数组最大和,要求O(n)时间复杂度 思路:核心思想就是当前遍历数组的时候,遇到的是一个正数,计算这个正数加上已有的和得到一个新的和 如果这个新的和比当前的正数大,那么保留该和否者更新和为当前正数 ...
- 【IT笔试面试题整理】连续子数组的最大和
[试题描述]输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组. 求所有子数组的和的最大值.要求时间复杂度O(n). 思路:当我们加上一个正数时,和会增加:当我们加上一个 ...
- Leetcode 剑指 Offer 42. 连续子数组的最大和 (每日一题 20211014)
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 ...
- 算法--三种方法求连续子数组的最大和
这是一道考的烂的不能再烂的题目,但是依然有很多公司乐于将这样的题目作为笔试或面试题,足见其经典. 题目描述: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子 ...
- 连续子数组的最大和python_连续子数组的最大和
题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求元素和值最大的那个子数组的和值. C#实现:public static int FindGreatestSum ...
- 【最佳解法】剑指 Offer 42. 连续子数组的最大和
我是小张同学,立志用最简洁的代码做最高效的表达 思路:动态规划 假设nums\textit{nums}nums 数组的长度是 nnn,下标从 000 到 n−1n-1n−1. 我们用 f(i)f(i) ...
最新文章
- 一口气说出四种幂等性解决方案,面试官露出了姨母笑~
- RDKit | 基于随机森林的化合物活性二分类模型
- 机器人产业这些领域大有可为
- 发布 | 2018年中美智慧城市行业研究系列报告
- J2EE从servlet开始
- 深入了解Brackets编辑器 [好东西啊]
- write()和read()
- 互联网1分钟 | 0321 小米上线“朕惊视频”;依图医疗与华为联合发布智能医疗云...
- 聊聊JavaScript和Scala的表达式 Expression
- 解决express video 手机无法播放的问题
- [Mac] php安装protobuf扩展
- 【python】mysql的操作
- java 统计字符串中每个字符出现的次数(数组或HashMap实现)
- ffmpeg -视频旋转和高清转码示例
- 运用c语言和Java写九九乘法表
- java ssh超市进销存管理系统(源码+文档)【源码分享】
- Java程序员职业发展规划和方向有哪些?
- c语言输入星期的首字母,关于简单C语言的练习输入一个正整数表示一个星期中的某一天,若此数字在[1,7]内,则输出对应英文星期名,否则表示输入我做...
- 红蓝出屏3D图片,请使用红蓝眼镜观看
- Linux内核之进程6: 深度睡眠