>【★】2155. 分组得分最高的所有下标<
>maxScoreIndices<
一、解题思路
1、解法一( Java )
解法思路:单次循环
根据下标 i
将 nums
拆分成两个数组,对数组进行 一次遍历
,并维护前缀和。对于当前遍历到的位置 i
,如果前缀和 preSum
大于历史最大值 max
,那么就对历史最大值进行更新,并重置历史最大值对应的下标为 i
;如果其等于历史最大值,那么只需要将 i
加入历史最大值的下标集合即可。
前缀和
的定义为:如果遇到 0
就增加 1,否则减少 1。
代码如下:
/**
* @author listen1024
* @date 2022-2-8
* 【★】2155. 分组得分最高的所有下标
*/
class Solution {
public List<Integer> maxScoreIndices(int[] nums) {
List<Integer> ans=new ArrayList<>();
ans.add(0);
int max=0,preSum=0;
for(int i=0;i<nums.length;i++){
if(nums[i] == 0){
preSum++;
if(preSum > max){
ans=new ArrayList<>();
ans.add(i+1);
max=preSum;
}
else if(preSum == max){
ans.add(i+1);
}
}
else{
preSum--;
}
}
return ans;
}
}
运行结果截图如下: