首页 > 其他分享 >leetcode 1191. K 次串联后最大子数组之和 未解决

leetcode 1191. K 次串联后最大子数组之和 未解决

时间:2024-12-30 21:53:30浏览次数:1  
标签:串联 arr 1191 res int max leetcode dp size

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

很蠢但能通过的方法:k >= 3时,算三次res。如果res2 -  res2 == res3 - res2,说明为等差数列。如果res2 -  res2 != res3 - res2,说明循环多次的结果都是一样的。

class Solution {
public:
    int kConcatenationMaxSum(vector<int>& arr, int k) {
        const int MOD = 1'000'000'007;
        int size = arr.size();
        if(size == 1){
            if(arr[0] > 0)  return (arr[0] * k) % MOD;
            else  return 0;
        }

        vector<int> dp(size);
        dp[0] = arr[0];
        int res = arr[0];

        for(int i = 1;i < size;++i){
            dp[i] = max(dp[i-1] + arr[i],arr[i]);
            res = max(res,dp[i]);
        }
        if(res < 0)  return 0;
        if(k == 1)  return res % MOD;

        int t1Res = res;
        for(int i = 0;i < size;++i){
            if(i == 0){
                dp[0] = max(dp[size-1] + arr[0],arr[0]);
                res = max(res,dp[0]);continue;
            }
            dp[i] = max(dp[i-1] + arr[i],arr[i]);
            res = max(res,dp[i]);
        }
        if(k == 2)  return res % MOD;
        
        int t2Res = res;
        for(int i = 0;i < size;++i){
            if(i == 0){
                dp[0] = max(dp[size-1] + arr[0],arr[0]);
                res = max(res,dp[0]);continue;
            }
            dp[i] = max(dp[i-1] + arr[i],arr[i]);
            res = max(res,dp[i]);
        }
        if(k == 3)  return res % MOD;

        if(t2Res - t1Res != res - t2Res)  return res;

        return (t1Res + (long)(k-1)*(t2Res-t1Res)) % MOD;
        
    }
};

 

标签:串联,arr,1191,res,int,max,leetcode,dp,size
From: https://www.cnblogs.com/uacs2024/p/18642538

相关文章

  • 【Leetcode_Hot100】链表
    链表160.相交链表206.反转链表234.回文链表141.环形链表142.环形链表II21.合并两个有序链表2.两数相加19.删除链表的倒数第N个结点25.K个一组翻转链表138.随机链表的复制148.排序链表23.合并K个升序链表146.LRU缓存160.相交链表方法一:模拟依......
  • leetcode137. 只出现一次的数字 II
    题目:        给你一个整数数组 nums,除某个元素仅出现一次外,其余每个元素都恰出现三次。请你找出并返回那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。示例1:输入:nums=[2,2,3,2]输出:3示例2:输入:nums=[......
  • leetcode 1749. 任意子数组和的绝对值的最大值
    1749.任意子数组和的绝对值的最大值没做出来......
  • leetcode 2606. 找到最大开销的子字符串
    2606.找到最大开销的子字符串classSolution{public:intmaximumCostSubstring(strings,stringchars,vector<int>&vals){intsize=s.size();vector<int>dp(size);autofound=chars.find(s[0]);if(found==s......
  • leetcode 213. 打家劫舍 II
    213.打家劫舍II与  198.打家劫舍  相比,多了首和尾不能同时偷的条件但是没写出来......
  • leetcode 3186. 施咒的最大总伤害
    3186.施咒的最大总伤害这道题相比 740.删除并获得点数  ,区别是这道题的元素值可以特别大,所以就不能开大数组。没做出来......
  • 攻克LeetCode 1055:探寻形成字符串的最短路径
    一、题目引入在LeetCode的题库中,1055.形成字符串的最短路径这道题饶有趣味且充满挑战。简单来说,对于给定的源字符串source和目标字符串target,我们要找出源字符串中能通过串联形成目标字符串的子序列的最小数量。如果无法通过串联源字符串中的子序列来构造目标字符串,那就得......
  • LeetCode1.两数求和 C题解(简单)
    两数求和1.原题目题目示例2.思路解析3.具体操作1.原题目题目LeetCode题库的第1题题目为:给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两......
  • LeetCode110平衡二叉树
    原理本题判断一个二叉树是否为平衡二叉树,核心思路是基于平衡二叉树的定义,即任意节点的左右子树的高度差的绝对值不超过1。通过递归地计算每个节点为根的子树的高度,在计算过程中判断是否满足高度差条件,如果发现某个节点的左右子树高度差超过1,则整棵树不是平衡二叉树,标记为特......
  • LeetCode热题100-移动零【JavaScript讲解】
    题目:快指针和慢指针同时移动,当遍历的值不为0的时候,将快指针的值赋给慢指针,如果遍历到0,快指针继续移动,慢指针不动等待被覆盖。之后使用fill方法填充0。具体答案放在最后啦~fill方法arr.fill(value[,start[,end]])参数说明:value:用于填充数组元素的值start(可选):开始......