1191. K 次串联后最大子数组之和

###思路
当k=1,跟经典的就没什么两样了
当k>2,思考子数组的长度l
当l<2n的时候,那么就是:

dp[i] = max(dp[i-1]+nums[i mod n], nums[i mod n]);

当l>=2n,那么就是多个arr数组连接在一起了,这时候,就是k-2个arr和加上l<2n时候的结果了。
代码

class Solution {
public:
    const int MOD = 1000000007;
    int kConcatenationMaxSum(vector<int>& arr, int k) {
        // 首先分析k=1时,跟经典的没什么区别
        using ll = long long;
        ll max_ = 0;
        ll cur = 0;
        for(auto&it:arr){
            max_ = max(max_+it, (ll)it);
            cur = max(max_, cur);
        }
        if (k == 1) return cur%MOD;

        // 当k>2时
        // 如果l<2n;说明就是经典的连续再遍历一次
        // 如果l>=2n,那么就是多个arr的和组成之后
        // 形成这样的[][][.][.] // 那么.代表的是,子数组结尾所在的位置
        // 那[.][.] 就退化成了结果了
        // 接着进行二次遍历
        ll sums = 0;
        for(auto&it:arr){
            sums+=it;
            max_ = max(max_+it, ll(it));
            cur = max(max_, cur);
        }
        return (((ll)k-2)*max(sums, (ll)0)+cur)%MOD;
    }
};
这个错误提示表明你在使用优化工具箱时,创建约束的过程中使用了不一致维度的数组。在使用 `optim.problemdef.OptimizationConstraint` 或者 `vertcat`(垂直连接函数)时,要求进行操作的各个矩阵或向量必须具有相同的列数。 为了解决这个问题,你需要检查在构建约束时涉及的所有矩阵或向量,并确保它们的列数相同。如果列数不同,则需要调整它们的尺寸,以保证在垂直连接时能够对齐。这通常可以通过重新定义变量、使用不同的表达式或者在连接之前对某些矩阵进行转置来实现。 这里有一些可能的解决步骤: 1. 确认所有参与约束构建的变量维度是否正确。 2. 如果有多个变量或表达式参与垂直连接,重新检查它们是否应该具有相同的维度。 3. 使用 `size` 函数来检查有问题的变量的尺寸,确保在垂直连接之前它们的列数是一致的。 4. 如果你正在构建线性约束或等式约束,请确保矩阵的行数与变量的数目相匹配。 5. 如果是不等式约束,确保不等式两边的矩阵或向量维度完全一致。 举个简单的例,如果你有如下代码段: ```matlab x = optimvar('x',3); y = optimvar('y',3); A = [1, 2, 3; 4, 5, 6]; % 2x3 矩阵 b = [1; 1]; % 2x1 向量 con1 = A*x <= b; % 正确的维度匹配 ``` 这段代码就不会出错,因为 `A` 是一个 2x3 的矩阵,而 `b` 是一个 2x1 的向量。如果维度不匹配,比如 `b` 是一个 3x1 的向量,那么就会产生错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值