文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个下标从 0 开始的二进制数组 nums ,数组长度为 n 。
nums 可以按下标 i( 0 <= i <= n )拆分成两个数组(可能为空):numsleft 和 numsright 。

  • numsleft 包含 nums 中从下标 0 到 i - 1 的所有元素(包括 0 和 i - 1 ),而 numsright 包含 nums 中从下标 i 到 n - 1 的所有元素(包括 i 和 n - 1 )。
  • 如果 i == 0 ,numsleft 为 ,而 numsright 将包含 nums 中的所有元素。
  • 如果 i == n ,numsleft 将包含 nums 中的所有元素,而 numsright 为

下标 i 的 分组得分 为 numsleft 中 0 的个数和 numsright 中 1 的个数之 和 。

返回 分组得分 最高 的 所有不同下标 。你可以按 任意顺序 返回答案。

示例 1:
输入:nums = [0,0,1,0]
输出:[2,4]
解释:按下标分组
- 0 :numsleft 为 [] 。numsright 为 [0,0,1,0] 。得分为 0 + 1 = 1 。
- 1 :numsleft 为 [0] 。numsright 为 [0,1,0] 。得分为 1 + 1 = 2 。
- 2 :numsleft 为 [0,0] 。numsright 为 [1,0] 。得分为 2 + 1 = 3 。
- 3 :numsleft 为 [0,0,1] 。numsright 为 [0] 。得分为 2 + 0 = 2 。
- 4 :numsleft 为 [0,0,1,0] 。numsright 为 [] 。得分为 3 + 0 = 3 。
下标 2 和 4 都可以得到最高的分组得分 3 。
注意,答案 [4,2] 也被视为正确答案。示例 2:
输入:nums = [0,0,0]
输出:[3]
解释:按下标分组
- 0 :numsleft 为 [] 。numsright 为 [0,0,0] 。得分为 0 + 0 = 0 。
- 1 :numsleft 为 [0] 。numsright 为 [0,0] 。得分为 1 + 0 = 1 。
- 2 :numsleft 为 [0,0] 。numsright 为 [0] 。得分为 2 + 0 = 2 。
- 3 :numsleft 为 [0,0,0] 。numsright 为 [] 。得分为 3 + 0 = 3 。
只有下标 3 可以得到最高的分组得分 3 。示例 3:
输入:nums = [1,1]
输出:[0]
解释:按下标分组
- 0 :numsleft 为 [] 。numsright 为 [1,1] 。得分为 0 + 2 = 2 。
- 1 :numsleft 为 [1] 。numsright 为 [1] 。得分为 0 + 1 = 1 。
- 2 :numsleft 为 [1,1] 。numsright 为 [] 。得分为 0 + 0 = 0 。
只有下标 0 可以得到最高的分组得分 2 。提示:
n == nums.length
1 <= n <= 10^5
nums[i] 为 0 或 1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/all-divisions-with-the-highest-score-of-a-binary-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 正向前缀和求左侧 0 的个数
  • 反向前缀和求右侧 1 的个数
  • 遍历求最大的和、及其 下标
class Solution:def maxScoreIndices(self, nums: List[int]) -> List[int]:n = len(nums)left0, right1 = [0 for _ in range(n)], [0 for _ in range(n)]for i in range(n):left0[i] = (0 if i==0 else left0[i-1]) + int(nums[i]==0)for i in reversed(range(n)):right1[i] = (0 if i==n-1 else right1[i+1]) + int(nums[i]==1)maxscore = 0idxs = []for i in range(n+1):score = (0 if i==0 else left0[i-1]) + (0 if i==n else right1[i])if score > maxscore:maxscore = scoreidxs = [i]elif score == maxscore:idxs.append(i)return idxs

1376 ms 30 MB Python3


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 2155. 分组得分最高的所有下标(前缀和)相关推荐

  1. 2022-1-30 Leetcode 5981.分组得分最高的所有下标

    前两版的方法都超时了, 第三版方法的核心是:最初的得分为整个数组的和,在从左向右的扫描的过程中,如果遇到 0 就加一分(说明右边的 1 的个数之和没有变,左边因为多了一个 0 而加上一分),如果遇到 ...

  2. Day30——分组得分最高的所有下标

    给你一个下标从 0 开始的二进制数组 nums ,数组长度为 n .nums 可以按下标 i( 0 <= i <= n )拆分成两个数组(可能为空):numsleft 和 numsrigh ...

  3. LEETCODE | PYTHON | 724 | 寻找数组的中心下标

    LEETCODE | PYTHON | 724 | 寻找数组的中心下标 1. 题目 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等 ...

  4. 【LeetCode】【HOT】208. 实现 Trie (前缀树)

    [LeetCode][HOT]208. 实现 Trie (前缀树) 文章目录 [LeetCode][HOT]208. 实现 Trie (前缀树) package hot;public class So ...

  5. leetcode 5607. 生成平衡数组的方案数 前缀和

    生成平衡数组的方案数 给你一个整数数组 nums .你需要选择 恰好 一个下标(下标从 0 开始)并删除对应的元素.请注意剩下元素的下标可能会因为删除操作而发生改变. 比方说,如果 nums = [6 ...

  6. LeetCode 1537. 最大得分(切片取出局部最大值)

    文章目录 1. 题目 2. 解题 1. 题目 你有两个 有序 且数组内元素互不相同的数组 nums1 和 nums2 . 一条 合法路径 定义如下: 选择数组 nums1 或者 nums2 开始遍历( ...

  7. LeetCode 2302. 统计得分小于 K 的子数组数目(前缀和+二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 一个数组的 分数 定义为数组之和 乘以 数组的长度. 比方说,[1, 2, 3, 4, 5] 的分数为 (1 + 2 + 3 + 4 + 5) * 5 = ...

  8. 【LeetCode - 798】得分最高的最小轮调(转化法)

    解题报告: 思路一:这题首先说一个nlogn的方法. 首先一个主客转化,题目描述是说把数组做翻转,idx不变,然后nums[i]和i作比较.那么我们可以转化为让数组不变,idx转变,即:假设刚开始i= ...

  9. LeetCode 2121. 相同元素的间隔之和(前缀和)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始.由 n 个整数组成的数组 arr . arr 中两个元素的 间隔 定义为它们下标之间的 绝对差 .更正式地,arr[i] 和 a ...

最新文章

  1. 不编程,拖拖鼠标图表自己动起来!来自图形学大牛陈宝权弟子,已获ACM CHI最佳论文荣誉提名...
  2. 这张“毅力号火星照片”,AI P过
  3. 记录使用Performance API遇到的问题
  4. 3.【练习题】构造方法与重载 定义一个网络用户类,要处理的信息有用户ID、用户密码、email地址。拓展:判断密码长度
  5. LoadRunner 脚本语言认识
  6. Python基础学习总结__Day3
  7. Web.Config文件配置之数据库连接配置
  8. Python__getattr__、__setattr__、__delattr__、__getitem__、__setitem__、__getattribute__方法的理解
  9. Hive自定义函数UDF、UDAF、UDTF
  10. 云服务器怎么配置文件,云服务器网卡怎么配置文件
  11. Linux man C++ 库函数
  12. ubuntu自定义安装里怎么选_安装地暖时,地板要怎么选?
  13. kubernetes 升级到1.6
  14. 万字拆解Ubras:年销15亿、暴涨10倍,内衣新秀的春天到了?
  15. Luogu P1540 机器翻译
  16. 物联网的体系结构和关键技术
  17. 软件测试工程师必备技能(初中高)
  18. OpenBmc开发13:添加传感器(fan)
  19. MongoDB学习总结四(详细记录使用MongoTemplate操作MongoDB数据库)
  20. PostgreSQL 简介

热门文章

  1. 山西台达plc可编程控制器_可编程控制器2(PLC)控制原理
  2. Python 第三方模块之 imgaug (图像增强)
  3. Python 之网络编程基础
  4. JavaWeb笔记05-解决线程安全问题
  5. 【Python】最新Python学习路线(完整详细版,含整套教程)
  6. C语言求最大公约数和最小公倍数的几种算法
  7. 未捕获typeerror: $形象。cropper不是函数_没有学不会的python--细说自定义函数的细节...
  8. MATLAB混合编程视频教程下载 SIMULINK系统仿真视频
  9. 取周一时间_周一到周五不好化妆?别着急,5款夏日通勤裸妆的教程来了!
  10. Linq To Sql进阶系列 -目录导航