LeetCode 2155. 分组得分最高的所有下标
前缀和
const int N = 1e5 + 10;
class Solution {
public:
int s0[N] = {0}, s1[N] = {0}; //0的个数前缀,1的个数前缀
vector<int> maxScoreIndices(vector<int>& nums) {
int n = nums.size();
for(int i = 1; i <= n ; i ++)
{
s0[i] = s0[i - 1] + (nums[i - 1] == 0);
s1[i] = s1[i - 1] + (nums[i - 1] == 1);
}
int maxv = 0;
for(int i = 0; i <= n; i ++)
if(s0[i] + s1[n] - s1[i] > maxv)
maxv = s0[i] + s1[n] - s1[i]; // 最大得分
vector<int> res;
for(int i = 0; i <= n; i ++)
if(s0[i] + s1[n] - s1[i] == maxv)
{
// cout << s0[i] <<" " << s1[i] <<" " << s1[n] << endl;
res.push_back(i);
}
return res;
}
};