从起点开始k个数的sum记为sum1,从终点开始k个数的sum记为sum2

如果sum1 > sum2,则说明相应长度取左边价值会更大,取完之后sum1 - 当前“起点”,sum2 - 当前“终点”

否则,取右边,sum1 - 当前“终点”,sum2 - 当前“起点”

相等时无所谓

class Solution {
public:
    int maxScore(vector<int>& cardPoints, int k) {
        int sum1 = 0, sum2 = 0;
        int p = 0, q = cardPoints.size() - 1;
        int len = cardPoints.size();
        for(int i = 0; i < len && i < k; i++)
        {
            sum1 += cardPoints[i];
            sum2 += cardPoints[len - i - 1];
        }
        int ret = 0;
        int k1 = k, k2 = k;
        while(k)
        {
            if(sum1 >= sum2)
            {
                ret += cardPoints[p];
                sum1 -= cardPoints[p];
                sum2 -= cardPoints[len - k2];
                k2--;
                p++;
            }
            else
            {
                ret += cardPoints[q];
                sum2 -= cardPoints[q];
                sum1 -= cardPoints[k1 - 1];
                k1--;
                q--;
            }

            k--;
        }
        return ret;

    }
};

 

自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。