Python|Leetcode《1995》|统计特殊四元组

简介: Python|Leetcode《1995》|统计特殊四元组

一、题目描述

题目:统计特殊四元组

难度:简单

描述:给你一个 下标从 0 开始 的整数数组 nums ,返回满足下述条件的 不同 四元组 (a, b, c, d) 的数目 :

  • nums[a] + nums[b] + nums[c] == nums[d]
  • a < b < c < d


示例1

输入:nums = [1,2,3,6]

输出:1

解释:满足要求的唯一一个四元组是 (0, 1, 2, 3) 因为 1 + 2 + 3 == 6 。


示例2

输入:nums = [1,1,1,3,5]

输出:4

解释:满足要求的 4 个四元组如下:

(0, 1, 2, 3): 1 + 1 + 1 == 3

(0, 1, 3, 4): 1 + 1 + 3 == 5

(0, 2, 3, 4): 1 + 1 + 3 == 5

(1, 2, 3, 4): 1 + 1 + 3 == 5


示例3

输入:nums = [3,3,6,4,5]

输出:0

解释:[3,3,6,4,5] 中不存在满足要求的四元组。


提示:

4 <= nums.length <= 50

1 <= nums[i] <= 100


二、题目解析

本题给出的难度为一道简单题,其简单的原因在于题目中提示给出的范围较小,我们使用暴力法(枚举)四个循环能够解决问题,但是这样的时间复杂度显然过高,因此尝试使用另一种解题思路——统计两数之和。


题目中给出的算式是一个四元组,因此我们可以尝试将其分为两部分,一部分为nums[a]+nums[b],另一部分为num[d]-num[c],此时的过程如下:


1.确定四个索引能够取到的范围(n为nums的长度):

a:(0,n-4)

b:(1,n-3)

c:(2,n-2)

d:(1,n-1)

2.得到所有的对于固定的b值考虑当前所有nums[a]+nums[b]的情况;

3.对于所有2的情况,考虑c和d出现的情形(固定索引c的值为b+1,从b+2开始到n-1遍历d的值);

4.通过步骤2、3的结合即可得到所有情况,计算满足条件的次数即可。

每次操作的范围如下(结合代码注释看更容易理解):

image.png

三、解题代码

解法(一)

暴力解法

class Solution:
    def countQuadruplets(self, nums: List[int]) -> int:
        n = len(nums)
        res = 0
        for a in range(n - 3):
            for b in range(a + 1, n - 2):
                for c in range(b + 1, n - 1):
                    for d in range(c + 1, n):
                        if nums[a] + nums[b] + nums[c] == nums[d]:
                            res += 1
        return count

解法(二)

统计两数之和(解析中的解法)

class Solution:
    def countQuadruplets(self, nums: List[int]) -> int:
        ct, res, n = Counter(), 0, len(nums)
        # 首先固定b的位置
        for b in range(1, n - 2):
            # 对于b的位置,每一个前面的位置都能够当作是a
            for a in range(b):
                # 计算a和b的加和,出现相同的和讲该位置的结果+1(Counter可以了解一下)
                ct[nums[a] + nums[b]] += 1
            # 每次固定c的位置为b+1,从b+2开始寻找d
            for d in range(b + 2, n):
                # 找到d-c的位置,有记录则加记录数,没有则加0
                res += ct[nums[d] - nums[b + 1]]
        return res
相关文章
|
2月前
|
XML 存储 数据处理
python绘制热力图-数据处理-VOC数据类别标签分布及数量统计(附代码)
python绘制热力图-数据处理-VOC数据类别标签分布及数量统计(附代码)
55 0
|
1天前
|
API Python
[AIGC] 使用Python刷LeetCode:常用API及技巧指南
[AIGC] 使用Python刷LeetCode:常用API及技巧指南
|
2天前
[leetcode~数位动态规划] 2719. 统计整数数目 hard
[leetcode~数位动态规划] 2719. 统计整数数目 hard
|
14天前
|
机器学习/深度学习 数据可视化 数据挖掘
用Python进行健康数据分析:挖掘医疗统计中的信息
【4月更文挑战第12天】Python在医疗健康数据分析中扮演重要角色,具备数据处理、机器学习、可视化及丰富生态的优势。基本流程包括数据获取、预处理、探索、模型选择与训练、评估优化及结果可视化。应用案例包括疾病预测、药物效果分析和医疗资源优化,例如使用RandomForestClassifier进行疾病预测,Logit模型分析药物效果,以及linprog优化医疗资源配置。
|
19天前
|
测试技术 Python
288统计出现最多次的字母(PYTHON)
288统计出现最多次的字母(PYTHON)
|
1月前
|
存储 数据管理 Serverless
Python实现:教你轻松统计文件夹下文件个数
Python实现:教你轻松统计文件夹下文件个数
27 0
|
1月前
leetcode2376. 统计特殊整数
leetcode2376. 统计特殊整数
15 1
|
1月前
|
Serverless
leetcode2719. 统计整数数目
leetcode2719. 统计整数数目
13 0
|
1月前
|
存储 数据采集 数据挖掘
python数据分析——数据分类汇总与统计
数据分类汇总与统计是指将大量的数据按照不同的分类方式进行整理和归纳,然后对这些数据进行统计分析,以便于更好地了解数据的特点和规律。
60 1
|
1月前
|
机器学习/深度学习 算法 数据挖掘
python数据分析——数据分析的统计推断
数据分析的统计推断是科学研究中的重要环节,它通过对样本数据的分析,对总体参数进行估计,并对假设进行检验。这一过程旨在从数据中提取有意义的信息,为决策提供科学依据。 在统计推断中,我们通常会遇到两类问题:参数估计和假设检验。参数估计是通过样本数据对总体参数进行点估计或区间估计。点估计是对总体参数的具体数值进行预测,而区间估计则是给出一个包含总体参数的置信区间。这两种估计方法都基于大数定律和中心极限定理,保证了估计的准确性和可靠性。
45 0