2321. 拼接数组的最大分数(leetcode)

https://leetcode.cn/problems/maximum-score-of-spliced-array/description/

这一题应该算一个连续最大子数组思维题,要点是根据差数组去做,然后求最值

class Solution {
public:
    int maximumsSplicedArray(vector<int>& nums1, vector<int>& nums2) {
        // f[i]表示以a[i]为结尾的最大子数组和
        // f[i]=max(f[i-1],0) + a[i];
        // 根据nums1和nums2的差来求最大子数组和
        const int N = 1e5+10;
        int f[N];
        int f2[N];
        int nums[N];
        memset(f,0,sizeof f);
        memset(f2,0,sizeof f2);
        for(int i=0;i<nums1.size();i++)nums[i]=nums1[i]-nums2[i];
        int maxAns=0,minAns=0;
        for(int i=1;i<=nums1.size();i++)
        {
            f[i]=max(f[i-1],0) + nums[i-1];
            f2[i]=min(f2[i-1],0) + nums[i-1];
            maxAns=max(f[i],maxAns);
            minAns=min(f2[i],minAns);
            printf("num=%d,maxAns=%d,minAns=%d\n",nums[i-1],maxAns,minAns);
        }
        int sum1=0,sum2=0;
        for(int i=0;i<nums1.size();i++)
        {
            sum1+=nums1[i];
            sum2+=nums2[i];
        }
        return max(abs(minAns)+sum1,maxAns+sum2);
    }
};

 

posted @ 2024-04-14 20:24  风乐  阅读(13)  评论(0)    收藏  举报