第一版:
class Solution {
public:
vector<int> maxScoreIndices(vector<int>& nums) {
map<int,int> myMap;
for(int i = 0;i <= nums.size();i++){
myMap[i] += accumulate(nums.begin()+i,nums.end(),0);
myMap[i] += i-accumulate(nums.begin(),nums.begin()+i,0);
}
int score = 0;
vector<int> ret;
for(auto it = myMap.begin();it != myMap.end();it++){
if(it->second == score){
ret.push_back(it->first);
}
else if(it->second > score){
ret.clear();
ret.push_back(it->first);
score = it->second;
}
}
return ret;
}
};
第二版
class Solution {
public:
vector<int> maxScoreIndices(vector<int>& nums) {
vector<int> ret;
int eachScore = 0;
int maxScore = 0;
for(int i = 0;i <= nums.size();i++){
eachScore += count(nums.begin(),nums.begin()+i,0);
eachScore += count(nums.begin()+i,nums.end(),1);
if(eachScore > maxScore){
ret.clear();
ret.push_back(i);
maxScore = eachScore;
}
else if(eachScore == maxScore){
ret.push_back(i);
}
}
return ret;
}
};
第三版
class Solution {
public:
vector<int> maxScoreIndices(vector<int>& nums) {
vector<int> ret;
int totalScore = accumulate(nums.begin(),nums.end(),0);
int maxScore = 0;
for(int i = 0;i <= nums.size();i++){
if(maxScore == totalScore){
ret.push_back(i);
}
else if(maxScore < totalScore){
ret.clear();
maxScore = totalScore;
ret.push_back(i);
}
if(i < nums.size()){
if(nums[i])
--totalScore;
else ++totalScore;
}
}
return ret;
}
};