Leetcode 3583. Count Special Triplets
- Leetcode 3583. Count Special Triplets
- 1. 解题思路
- 2. 代码实现
- 题目链接:3583. Count Special Triplets
1. 解题思路
这一题思路上需要取个巧,我们需要考察每一个元素 x x x作为中间元素时的情况,此时我们就是要找其左右 2 x 2x 2x元素的个数 n , m n,m n,m,则以该元素作为中间元素时,可选的三元组的总数就是 n m nm nm。因此,我们只需要遍历所有元素作为中间元素时的情况即可。
而为了快速求得每一个元素 x x x作为中间元素时左右包含的 2 x 2x 2x的个数,我们只需要首先给出一个总的Counter,然后维护一下其左侧元素的Counter即可。
2. 代码实现
给出python代码实现如下:
MOD = 10**9+7class Solution:def specialTriplets(self, nums: List[int]) -> int:cnt = Counter(nums)ans = 0left = defaultdict(int)for i, x in enumerate(nums):l = left[2*x]r = cnt[2*x]-left[2*x] if x != 0 else cnt[2*x]-left[2*x]-1ans = (ans + l*r) % MODleft[x] += 1return ans
提交代码评测得到:耗时687ms,占用内存43.11MB。