lintcode-45-最大子数组差
45-最大子数组差
给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。
返回这个最大的差值。注意事项
子数组最少包含一个数
样例
给出数组[1, 2, -3, 1],返回 6
挑战
时间复杂度为O(n),空间复杂度为O(n)
标签
贪心 枚举法 LintCode 版权所有 数组 子数组 前后遍历
思路
复用“求最大字数组和”的代码,求出从左自右遍历数的最大子数组maxLeft、最小子数组minLeft和从右自左遍历数的最大子数组maxRight、最小子数组minRight。然后求出maxLeft与minRight的最大差,minLeft与maxRight的最大差。即可得出最大子数组差。
code
class Solution {
public:
/**
* @param nums: A list of integers
* @return: An integer indicate the value of maximum difference between two
* Subarrays
*/
int maxDiffSubArrays(vector<int> nums) {
// write your code here
int size = nums.size(), i = 0;
int sum = 0, maxValue = 0;
int dec = 0, minValue = 0;
int *maxLeft = new int[size];
int *minLeft = new int[size];
int *maxRight = new int[size];
int *minRight = new int[size];
sum = maxValue = maxLeft[0] = nums[0];
for(i=1; i<size; i++) {
if(sum < 0) {
sum = nums[i];
}
else {
sum += nums[i];
}
if(sum > maxValue) {
maxValue = sum;
}
maxLeft[i] = maxValue;
}
sum = maxValue = maxRight[size-1] = nums[size-1];
for(i=size-2; i>=0; i--) {
if(sum < 0) {
sum = nums[i];
}
else {
sum += nums[i];
}
if(sum > maxValue) {
maxValue = sum;
}
maxRight[i] = maxValue;
}
dec = minValue = minLeft[0] = nums[0];
for(i=1; i<size; i++) {
if(dec > 0) {
dec = nums[i];
}
else {
dec += nums[i];
}
if(dec < minValue) {
minValue = dec;
}
minLeft[i] = minValue;
}
dec = minValue = minRight[size-1] = nums[size-1];
for(i=size-2; i>=0; i--) {
if(dec > 0) {
dec = nums[i];
}
else {
dec += nums[i];
}
if(dec < minValue) {
minValue = dec;
}
minRight[i] = minValue;
}
int result1 = 0x80000000;
int result2 = 0x80000000;
for(i=0; i<size-1; i++) {
result1 = (result1 > maxLeft[i]-minRight[i+1])?result1:( maxLeft[i]-minRight[i+1]);
result2 = (result2 > maxRight[i+1]-minLeft[i])?result2:( maxRight[i+1]-minLeft[i]);
}
delete[] maxLeft;
delete[] minLeft;
delete[] maxRight;
delete[] minRight;
return (result1 > result2)?result1:result2;
}
};
lintcode-45-最大子数组差的更多相关文章
- lintcode:最大子数组差
题目 最大子数组差 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大. 返回这个最大的差值. 样例 给出数组[1, 2, -3, 1], ...
- C++:最大子数组差
最大子数组差 内存限制:128 MiB 时间限制:1000 ms 题目描述: 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B) ...
- lintcode:最大子数组II
题目 最大子数组 II 给定一个整数数组,找出两个不重叠子数组使得它们的和最大. 每个子数组的数字在数组中的位置应该是连续的. 返回最大的和. 样例 给出数组[1, 3, -1, 2, -1, 2], ...
- LintCode-最大子数组差
给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大. 返回这个最大的差值. 您在真实的面试中是否遇到过这个题? Yes 例子 给出数组[1 ...
- lintcode :最大子数组
题目: 最大子数组 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6 ...
- lintcode 最大子数组III
题目描述 给定一个整数数组和一个整数 k,找出 k 个不重叠子数组使得它们的和最大.每个子数组的数字在数组中的位置应该是连续的. 返回最大的和. 注意事项 子数组最少包含一个数 样例 给出数组 [-1 ...
- 最大子数组(LintCode)
最大子数组 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6 注意 子数 ...
- 对"一维最大子数组和"问题的思考
对"一维最大子数组和"问题的思考(homework-01) 一维最大子数组和问题,即给定一个数组,在它所有的连续子数组的和中,求最大的那个和.“最大子数组和”是一个很好的IT面试考 ...
- lincode.41 最大子数组
最大子数组 描述 笔记 数据 评测 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 注意事项 子数组最少包含一个数 您在真实的面试中是否遇到过这个题? Yes 哪家公司问你的这个题? ...
随机推荐
- django+xadmin在线教育平台(十七)
8-1 课程列表 拷贝课程列表页到template目录 创建课程相关的urls.py Mxonline2/urls.py中声明包含到course的url中: # 课程app的url配置 url(r&q ...
- visio studio code 用chrom启动打开本地html
{ // 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述. // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linki ...
- MySql外键建立在哪里(更新)
一对一的时候:分为主表和附表 外键建立在附件上 附表的外键关联到主表的主键上,Example:学生表和学生信息表,在学生信息表上建立外键 一对多的时候:分为一和多 外键建立在多上 Exampl ...
- Mysql导出表结构和数据
导出数据库 -- 导出dbname表结构 mysqldump -uroot -p123456 -d dbname > dbname.sql -- 导出dbname表数据 mysqldump -u ...
- python应用:爬虫实例(动态网页)
以爬取搜狗图片为例,网页特点:采用“瀑布流”的方式加载图片,图片的真实地址存放在XHR中 #-*-coding:utf8-*- import requests import urllib import ...
- python 函数 练习
# 2.写函数,接收n个数字,求这些参数数字的和. def sum_func(*args): total = 0 for i in args: total += i return total prin ...
- MetInfo最新网站漏洞如何修复以及网站安全防护
metinfo漏洞于2018年10月20号被爆出存在sql注入漏洞,可以直接拿到网站管理员的权限,网站漏洞影响范围较广,包括目前最新的metinfo版本都会受到该漏洞的攻击,该metinfo漏洞产生的 ...
- Awakening Your Senses【唤醒你的感觉官能】
Awakening Your Senses Give youself a test. Which way is the wind blowing? How many kinds of wildflow ...
- R语言绘图:ROC曲线图
使用pROC包绘制ROC曲线 #####***绘制ROC曲线***##### library("pROC") N <- dim(data2)[1] #数据长度 set.see ...
- 剑指offer题目系列一
本篇介绍<剑指offer>第二版中的四个题目:找出数组中重复的数字.二维数组中的查找.替换字符串中的空格.计算斐波那契数列第n项. 这些题目并非严格按照书中的顺序展示的,而是按自己学习的顺 ...