Python|Leetcode《1995》|统计特殊四元组
2021/12/29 17:37:21
本文主要是介绍Python|Leetcode《1995》|统计特殊四元组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
专栏《LeetCode|一刷到底》
打卡每天leetcode精选每日一题(尽量不断更!)
点击关注不迷路!!!
一、题目描述
- 题目:统计特殊四元组
- 难度:简单
- 描述:给你一个 下标从 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]
,此时的过程如下:
- 确定四个索引能够取到的范围(n为nums的长度):
a:(0,n-4)
b:(1,n-3)
c:(2,n-2)
d:(1,n-1) - 得到所有的对于固定的b值考虑当前所有
nums[a]+nums[b]
的情况; - 对于所有2的情况,考虑c和d出现的情形(固定索引c的值为b+1,从b+2开始到n-1遍历d的值);
- 通过步骤2、3的结合即可得到所有情况,计算满足条件的次数即可。
每次操作的范围如下(结合代码注释看更容易理解):
三、解题代码
解法(一)
暴力解法
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
这篇关于Python|Leetcode《1995》|统计特殊四元组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享
- 2024-12-19Python资料:新手入门的全面指南
- 2024-12-19Python股票自动化交易实战入门教程
- 2024-12-19Python股票自动化交易入门教程
- 2024-12-18Python量化入门教程:轻松掌握量化交易基础知识