У меня есть код ниже:
#include<algorithm>
#include<cstdio>
#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
int maxScore(vector<int>& cardPoints, int k) {
if(k==cardPoints.size()) return accumulate(cardPoints.begin(), cardPoints.end(), 0);
int endSum=accumulate(cardPoints.begin()+(cardPoints.size()-k), cardPoints.end(), 0);
int maxValue=endSum;
int i=0;
int j=cardPoints.size()-k;
while(i<k && j<cardPoints.size()) {
endSum-=cardPoints[j++]+cardPoints[i++]; //-> will change this line
maxValue=max(maxValue, endSum);
}
return maxValue;
}
int main() {
vector<int> v={100,40,17,9,73,75};
cout<<maxScore(v, 3);
return 0;
}
Вывод, который я получаю: 157
. Однако, если я изменю строку, прокомментированную выше, как:
endSum=endSum-cardPoints[j++]+cardPoints[i++];
, то получу вывод 248
. Живые примеры здесь и здесь соответственно. Я не думаю, что я делаю что-то другое в двух утверждениях выше. Я думаю это может быть связано с операциями после увеличения для i
и j
. Поскольку все они выполняются в одной строке, я не могу использовать какие-либо операторы печати для отладки.
Может кто-нибудь указать, почему я получаю другой вывод?