Leetcode 3739. Count Subarrays With Majority Element II

  • [Leetcode 3739. Count Subarrays With Majority Element II](#Leetcode 3739. Count Subarrays With Majority Element II)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题是Leetcode双周赛169的第四题,是一个hard的题目。但它其实和题目Leetcode 3737是完全一样的,只是后者对于复杂度要求更低,允许通过暴力循环的方式求解。

这一题的核心思路在于一个数值转变,就是构造一个与原数组等长的新数组,其每一个元素的取值仅为1-1,如果该元素与target相同,则取1,反之取为-1

此时,我们要构造一个target为majority的子数组,事实上只需要在新的数组上找到一个子串,使之元素和大于0即可。而后者我们又可以将其转换为一个前序和的问题。要找到任意一个元素作为子串终点时的满足条件的子串的数目,就是考察其之前元素的所有前序和当中有多少严格小于当前元素的前序和的结果即可。此时,我们维护一个有序数组即可对其进行求解。

2. 代码实现

给出python代码实现如下:

python 复制代码
class Solution:
    def countMajoritySubarrays(self, nums: List[int], target: int) -> int:
        arr = [1 if num == target else -1 for num in nums]
        cumsum = accumulate(arr)
        s = [0]
        ans = 0
        for prefix in cumsum: 
            idx = bisect.bisect_left(s, prefix)
            ans += idx
            s.insert(idx, prefix)
        return ans

提交代码评测得到:耗时3461ms,占用内存30.58MB。

相关推荐
Espresso Macchiato17 天前
Leetcode 3729. Count Distinct Subarrays Divisible by K in Sorted Array
leetcode·leetcode hard·容斥原理·leetcode 3729·leetcode周赛473·前序和数组
Espresso Macchiato1 个月前
Leetcode 3715. Sum of Perfect Square Ancestors
算法·leetcode·职场和发展·leetcode hard·树的遍历·leetcode 3715·leetcode周赛471
Espresso Macchiato1 个月前
Leetcode 3710. Maximum Partition Factor
leetcode·职场和发展·广度优先遍历·二分法·leetcode hard·leetcode 3710·leetcode双周赛167
Espresso Macchiato1 个月前
Leetcode 3700. Number of ZigZag Arrays II
动态规划·leetcode hard·矩阵乘法·leetcode 3700·leetcode周赛469
Espresso Macchiato1 个月前
Leetcode 3695. Maximize Alternating Sum Using Swaps
并查集·leetcode hard·dsu·uf·leetcode 3695·leetcode双周赛166
Espresso Macchiato4 个月前
Leetcode 3624. Number of Integers With Popcount-Depth Equal to K II
leetcode hard·segment tree·分段树·leetcode 3624·leetcode周赛459
Espresso Macchiato6 个月前
Leetcode 3563. Lexicographically Smallest String After Adjacent Removals
动态规划·leetcode hard·leetcode周赛451·leetcode 3563
Espresso Macchiato6 个月前
Leetcode 3562. Maximum Profit from Trading Stocks with Discounts
动态规划·背包问题·leetcode hard·leetcode 3562·leetcode周赛451
Espresso Macchiato6 个月前
Leetcode 3530. Maximum Profit from Valid Topological Order in DAG
动态规划·leetcode hard·拓扑序列·leetcode 3530·leetcode双周赛155