问题:

给出一个数组,求出其所有连续子数组中,和最大是多少,注意,这些子数组中,可以选择最多删除一个数。

思路:

这个题目,其实是剑指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 连续子数组中可删除一个数的最大和相关推荐

  1. php取数组中连续数,PHP实现求连续子数组最大和问题2种解决方法

    本文实例讲述了PHP实现求连续子数组最大和问题2种解决方法.分享给大家供大家参考,具体如下: 问题描述 求子数组的最大和 题目描述: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整 ...

  2. 《剑指offer》-- 复杂链表的复制、字符串的排列、数组中出现次数超过一半的数字、连续子数组的最大和

    一.复杂链表的复制: 参考牛客网的chancy:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba 1 ...

  3. 结对开发项目:求整数数组中连续子数组和的最大值

    小组成员:安娜 王鑫楠 题目二:求整数数组中连续子数组和的最大值. 1.分析过程: 题目收到后,前五分钟设计算法,首先也想到是不是一次遍历可以解决,考虑了一下觉得难度有点大最后还是果断放弃.我刚开始的 ...

  4. 力扣1438——绝对差不超过限制的最长连续子数组(滑动窗口+单调队列)

    题目描述(中等) 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条件 ...

  5. 【剑指offer-Java版】31连续子数组的最大和

    连续子数组最大和,要求O(n)时间复杂度 思路:核心思想就是当前遍历数组的时候,遇到的是一个正数,计算这个正数加上已有的和得到一个新的和 如果这个新的和比当前的正数大,那么保留该和否者更新和为当前正数 ...

  6. 【IT笔试面试题整理】连续子数组的最大和

    [试题描述]输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组. 求所有子数组的和的最大值.要求时间复杂度O(n). 思路:当我们加上一个正数时,和会增加:当我们加上一个 ...

  7. Leetcode 剑指 Offer 42. 连续子数组的最大和 (每日一题 20211014)

    输入一个整型数组,数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 ...

  8. 算法--三种方法求连续子数组的最大和

    这是一道考的烂的不能再烂的题目,但是依然有很多公司乐于将这样的题目作为笔试或面试题,足见其经典. 题目描述: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子 ...

  9. 连续子数组的最大和python_连续子数组的最大和

    题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求元素和值最大的那个子数组的和值. C#实现:public static int FindGreatestSum ...

  10. 【最佳解法】剑指 Offer 42. 连续子数组的最大和

    我是小张同学,立志用最简洁的代码做最高效的表达 思路:动态规划 假设nums\textit{nums}nums 数组的长度是 nnn,下标从 000 到 n−1n-1n−1. 我们用 f(i)f(i) ...

最新文章

  1. 一口气说出四种幂等性解决方案,面试官露出了姨母笑~
  2. RDKit | 基于随机森林的化合物活性二分类模型
  3. 机器人产业这些领域大有可为
  4. 发布 | 2018年中美智慧城市行业研究系列报告
  5. J2EE从servlet开始
  6. 深入了解Brackets编辑器 [好东西啊]
  7. write()和read()
  8. 互联网1分钟 | 0321 小米上线“朕惊视频”;依图医疗与华为联合发布智能医疗云...
  9. 聊聊JavaScript和Scala的表达式 Expression
  10. 解决express video 手机无法播放的问题
  11. [Mac] php安装protobuf扩展
  12. 【python】mysql的操作
  13. java 统计字符串中每个字符出现的次数(数组或HashMap实现)
  14. ffmpeg -视频旋转和高清转码示例
  15. 运用c语言和Java写九九乘法表
  16. java ssh超市进销存管理系统(源码+文档)【源码分享】
  17. Java程序员职业发展规划和方向有哪些?
  18. c语言输入星期的首字母,关于简单C语言的练习输入一个正整数表示一个星期中的某一天,若此数字在[1,7]内,则输出对应英文星期名,否则表示输入我做...
  19. 红蓝出屏3D图片,请使用红蓝眼镜观看
  20. Linux内核之进程6: 深度睡眠

热门文章

  1. Linux下使用exec命令将文件与文件描述符关联
  2. 设计模式(六)原型模式
  3. Java中创建子类实例时会创建父类实例?
  4. MS SQL 日常维护管理常用脚本(二)
  5. 两个框架之间的数据类型转换,需要桥接技术
  6. 一个功能强大超级好用的图表组件Dundas Chart
  7. node.js http-server 搭建本地服务器
  8. Trie树 01Trie
  9. POJ 1014 Dividing【多重背包+二进制优化】
  10. 【FIRST USE】第一次用git把代码上传到github