LintCode 45 最大子数组差
来源:互联网 发布:星际争霸mac版 编辑:程序博客网 时间:2024/06/10 02:42
题目:maxDiffSubArrays
要求:
给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。
返回这个最大的差值。
注意事项
子数组最少包含一个数
样例:
给出数组[1, 2, -3, 1],返回 6
算法要求:
时间复杂度为O(n),空间复杂度为O(n)
解题思路:
第一次,找每点的左边最大和右边最小,最后比较差值的绝对值,
第二次,找每点的左边最小和右边最大,最后比较差值的绝对值。
算法如下:
int maxDiffSubArrays(vector<int> nums) { // write your code here int size = nums.size(); int num[size]; int max = nums[0]; int sum = 0; for (int i = 0; i < size - 1; i++) { sum += nums[i]; if (sum > max) { max = sum; } num[i] = max; if (sum < 0) { sum = 0; } } int min = nums[size - 1]; sum = 0; for (int j = size - 1; j > 0; j--) { sum += nums[j]; if (sum < min) { min = sum; } num[j - 1] -= min; if (sum > 0) { sum = 0; } } int am = -1; for (int i = 0; i < size - 1; i++) { if (am < abs(num[i])) { am = abs(num[i]); } } max = nums[size - 1]; sum = 0; for (int i = size - 1; i > 0; i--) { sum += nums[i]; if (sum > max) { max = sum; } num[i - 1] = max; if (sum < 0) { sum = 0; } } min = nums[0]; sum = 0; for (int j = 0; j < size - 1; j++) { sum += nums[j]; if (sum < min) { min = sum; } num[j] -= min; if (sum > 0) { sum = 0; } } for (int i = 0; i < size - 1; i++) { if (am < abs(num[i])) { am = abs(num[i]); } } return am; }
0 0
- lintcode(45)最大子数组差
- LintCode 45 最大子数组差
- LintCode-最大子数组差
- LintCode--最大子数组差
- LintCode:最大子数组差
- lintcode--最大子数组差
- lintcode---最大子数组差
- ***[Lintcode]Maximum Subarray Difference 最大子数组差
- LintCode: 最大子数组
- lintcode ----最大子数组
- lintcode,最大子数组
- 【LintCode】最大子数组
- Lintcode最大子数组
- LintCode 最大子数组
- lintcode最大子数组
- Lintcode:最大子数组
- 【lintcode】最大子数组
- 最大子数组差
- CSU-1783: 聊天止于呵呵(字符串处理)
- DBA必知的mysql备份与还原
- epoll为什么比select和poll效率更高
- Less-13&14
- shiro与spring整合之DelegatingFilterProxy源码解析
- LintCode 45 最大子数组差
- 链表中倒数第K个节点
- solr 报错:. Index fetch failed. Exception: Server refused connection
- JavaScrip数组去重
- Java中通过FTP上传和下载
- MySQL视图2
- 寻找最小生成树的欧拉路径,即一笔画问题
- oracle 外部表总结
- jmeter 3.0 databody 乱码