博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LintCode "Maximum Subarray Difference"
阅读量:4320 次
发布时间:2019-06-06

本文共 2666 字,大约阅读时间需要 8 分钟。

A variantion to "largest\smallest consecutive subarray". Idea is, at position i, the current max diff is max(max_left[i] - min_right[i+1], max_right[i + 1] - min_left[i]). Yes you can see boiler-plate code below. I'm lazy to make it shorter now.

class Solution {    void largest_l2r(vector
&A, vector
&ret) { size_t len = A.size(); ret.resize(len); int csum = A[0], sofar = A[0]; ret[0] = A[0]; for (int i = 1; i < len; i++) { int nsum = csum + A[i]; if (A[i] > nsum) { csum = A[i]; } else { csum = nsum; } sofar = max(sofar, csum); ret[i] = sofar; } } void smallest_l2r(vector
&A, vector
&ret) { size_t len = A.size(); ret.resize(len); int csum = A[0], sofar = A[0]; ret[0] = A[0]; for (int i = 1; i < len; i++) { int nsum = csum + A[i]; if (A[i] < nsum) { csum = A[i]; } else { csum = nsum; } sofar = min(sofar, csum); ret[i] = sofar; } } void largest_r2l(vector
&A, vector
&ret) { size_t len = A.size(); ret.resize(len); int csum = A.back(), sofar = A.back(); ret[len - 1] = A.back(); for (int i = len - 2; i >= 0; i --) { int nsum = csum + A[i]; if (A[i] > nsum) { csum = A[i]; } else { csum = nsum; } sofar = max(sofar, csum); ret[i] = sofar; } } void smallest_r2l(vector
&A, vector
&ret) { size_t len = A.size(); ret.resize(len); int csum = A.back(), sofar = A.back(); ret[len - 1] = A.back(); for (int i = len - 2; i >= 0; i --) { int nsum = csum + A[i]; if (A[i] < nsum) { csum = A[i]; } else { csum = nsum; } sofar = min(sofar, csum); ret[i] = sofar; } }public: /** * @param nums: A list of integers * @return: An integer indicate the value of maximum difference between two * Subarrays */ int maxDiffSubArrays(vector
nums) { vector
max_l2r, max_r2l; largest_l2r(nums, max_l2r); largest_r2l(nums, max_r2l); vector
min_l2r, min_r2l; smallest_l2r(nums, min_l2r); smallest_r2l(nums, min_r2l); int ret = INT_MIN; for(int i = 0; i < nums.size() - 1; i ++) { int r1 = max_l2r[i] - min_r2l[i + 1]; int r2 = max_r2l[i + 1] - min_l2r[i]; ret = max(ret, max(r1, r2)); } return ret; }};
View Code

转载于:https://www.cnblogs.com/tonix/p/4889335.html

你可能感兴趣的文章
html知识2
查看>>
Python—面向对象01
查看>>
Android DDMS ADB Hierarchy Viewer Lint
查看>>
Linux命令学习(5):more和less
查看>>
Linux 三剑客之sed命令总结
查看>>
倒计时
查看>>
36.Altium Designer(Protel)网络连接方式Port和Net Label详解
查看>>
读《分布式一致性原理》CURATOR客户端3
查看>>
iOS 虚拟机测试出现的相关问题
查看>>
MySQL crash-safe replication(3): MySQL的Crash Safe和Binlog的关系
查看>>
mac 无法打开xx ,因为无法确认开发者身份
查看>>
简单的排序算法(冒泡、选择、插入)
查看>>
[剑指Offer] 11.二进制中1的个数
查看>>
重置报表输出选择
查看>>
ip代理池抓取qq音乐热歌前300
查看>>
Android面试题集合
查看>>
Android NDK开发
查看>>
Centos中安装和配置vsftp简明教程
查看>>
spring源码学习之AOP(一)
查看>>
AES加密算法动画演示
查看>>