public class Solution {
public IList<int> MaxScoreIndices(int[] nums) {
// 默认初始化返回结果的大小
List<int> ans = new List<int>(nums.Length);
// maxVal : 当前最大值
// num : 左边分出的数组元素为0的个数
// ii : 分离左右数组的中间下标
int maxVal = 0, num = 0, ii = nums.Length;
// 这里直接处理ii为nums.Length的情况
// 即右边的数组为nums本身,二左边的数组为空
for(int i = 0; i < nums.Length; i++){
if(nums[i] == 0)
num++;
}
// 记录 ii == nums.Length的情况
maxVal = num;
ans.Add(ii);
// num0 : 右边分出的数组元素为1的个数
int num0 = 0;
for(int i = ii - 1; i >= 0; i--){
// 当遇到 1则累加 右边数组1的个数记录,否则雷减左边数组0的个数记录
if(nums[i] == 1){
num0++;
}else{
num--;
}
// 计算结果
int tmpVal = num0 + num;
if(tmpVal > maxVal){
// 如果当前的maxVal不是最大值则记录当前最大值,清空下标记录
maxVal = tmpVal;
ans.Clear();
ans.Add(i);
}else if(tmpVal == maxVal){
// 记录相同的最大值下标
ans.Add(i);
}
}
return ans;
}
}
移动 [5981] 分组得分最高的所有下标
最新推荐文章于 2024-09-14 18:52:56 发布