日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/7/5 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 2155. 分组得分最高的所有下标(前缀和) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 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 。 下標 24 都可以得到最高的分組得分 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]01

來源:力扣(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. 分组得分最高的所有下标(前缀和)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。