动态规划,我尽力了…
class Solution {
public:
int findMinMoves(vector<int>& machines) {
int l(0),r(0),nextl(0),maxper(0), i, avr(0), n = machines.size();
vector<int>::iterator it;
for (it = machines.begin(); it != machines.end(); ++it)
{
avr += *it;
}
if (avr%n) return -1;
avr /= n;
it = machines.begin();
dp[0] = avr - *it;
++it;
if (dp[0]<0)
{
r = -dp[0];
}
else {
nextl = dp[0];
}
maxper=l+r;
for (i = 1; it != machines.end(); ++it, ++i)
{
l = nextl;
dp[i] = avr - *it + dp[i - 1];
if (dp[i]<0)
{
r = -dp[i];
nextl = 0;
}
else {
r = 0;
nextl = dp[i];
}
if (!*it)
{
if (r) ++r;
if (l) ++l;
}
maxper = max(maxper, l + r);
}
return maxper;
}
private:
int dp[10001];
};
给大佬跪了
class Solution {
public:
int findMinMoves(vector<int>& machines) {
vector<int>::iterator it;
int current(0),avr(0),n=machines.size(),maxstep(0);
for(it=machines.begin();it!=machines.end();++it)
{
avr+=*it;
}
if(avr%n) return -1;
avr/=n;
for(it=machines.begin();it!=machines.end();++it)
{
current+=avr-*it;
maxstep=max(maxstep,max(abs(current),*it-avr));
}
return maxstep;
}
};