允许交换两个数(一对)的位置 求最大子数组和
来源:互联网 发布:mac. wps 编辑:程序博客网 时间:2024/04/28 23:40
#include <iostream>#include <vector>using namespace std;int findMaxSubquenceSum(vector<int> a) {int len = a.size();/* * prevMaxSum[i-1]表示i前某一元素交换到i上是i前的元素可达到最大值 * 是prevMaxSum[i-1] 不是prevMaxSum[i] */int* prevMaxSum = new int[len];/* * backMaxSum[i]表示从i到len-1的元素所能达到的最大值 */int* backMaxSum = new int[len];int curMax = a[0];prevMaxSum[0] = a[0];for (int i = 1; i < len; ++i) {//now记录最大元素curMax = max(curMax, a[i]);prevMaxSum[i] = max(curMax, a[i] + prevMaxSum[i - 1]);}backMaxSum[len - 1] = a[len - 1];int result = a[len - 1];for (int i = len - 2; i >= 0; --i) {backMaxSum[i] = max(backMaxSum[i + 1], 0) + a[i];result = max(backMaxSum[i], result);}for (int i = 1; i < len; ++i) {/* * 当交换元素下标为i时的最大值: backMaxSum[i] - a[i] + prevMaxSum[i - 1] * 这里是 prevMaxSum[i - 1]和backMaxSum[i] - a[i]注意下标 */result = max(backMaxSum[i] - a[i] + prevMaxSum[i - 1], result);}return result;}/*由前向后交换,所以必须有反序列*/int findMaxSubquenceSumWithSwap(vector<int> a) {int result = findMaxSubquenceSum(a);for (int i = 0, j = a.size() - 1; i < j; ++i, --j) {swap(a[i], a[j]);}return max(result, findMaxSubquenceSum(a));}
0 1
- 允许交换两个数(一对)的位置 求最大子数组和
- 求最大子数组的和,以及求该最大子数组的起始位置和末尾位置
- 求两个子数组最大的累加和
- 求两个子数组最大的累加和
- hdu 2838 树状数组求逆序数及交换位置产生移动的数的和
- 交换两个数的位置
- 交换两个数的位置
- 求数组最大子数组的和
- 第二题 求数组中和最大的子数组和其对应的位置
- 求两个数组的公共子数组的最大长度
- 求连续子数组的最大和,并记录其起始结束位置
- 求子数组的最大和
- 面试---求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- hive:orc file
- 【HDU 2003】求绝对值 水
- 在UI界面上加边框
- 相关FirDAC引用网址
- c——内置类型字面值
- 允许交换两个数(一对)的位置 求最大子数组和
- 大数据文本读取并保存到MSSQL的坑
- 小木棍_洛谷1120_搜索
- #MyBatis中使用Ehcache缓存框架
- Flask-Web 表单
- java.security.ProviderException: java.security.KeyException
- Eclipse 编辑HTML时卡顿假死
- java时间格式化----java.text.SimpleDateFormat
- break与continue--Java基础024