栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

移动 [5981] 分组得分最高的所有下标

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

移动 [5981] 分组得分最高的所有下标

public class Solution {
    public IList MaxScoreIndices(int[] nums) {
      // 默认初始化返回结果的大小
      List ans = new List(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;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/720304.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号