菜鸟的每日力扣系列——1995. 统计特殊四元组
统计 系列 每日 菜鸟 特殊 力扣
2023-06-13 09:15:51 时间
这个题首先可以使用两数之和的思想,以[1, 1, 1, 3, 5]为例,由于要统计四元组,我们可以把它划分成两部分,枚举左边两数之和,枚举右边两数之差,如果相等,统计结果加一。
和昨天的题目有些类似,我们用一个哈希表存储两边枚举后的和(差)的结果,可以用Counter(),在python中也可以使用collections库下的defaultdict,它与普通字典的区别在于如果查不到对应的key,不会返回KeyError,而是返回一个默认的空值,例如list是[],str对应"",set对应set(),int对应0。
from typing import List
from collections import defaultdict
def count_special_quadruplets(nums: List[int]) -> int:
cache = defaultdict(int)
res = 0
for i in range(1, len(nums)-2): # 除去最后一个元素
for j in range(i):
cache[nums[i]+nums[j]] += 1 # 左半边计算和
for j in range(i+2, len(nums)):
res += cache[nums[j] - nums[i+1]]
return res
nums = [1,1,1,3,5]
print(count_special_quadruplets(nums)) # 4
第一层for i in range(1, len(nums)-2):统计了到目前为止统计了所有0到i的两坐标和;
在cache[nums[i]+nums[j]] += 1之后,我们得到第三个元素下标是i+1,然后枚举第四个元素下标j范围是第三个元素之后 i+2到数组末尾。
res += cache[nums[j] - nums[i+1]]在左边之和的结果上叠加右边之差的结果,最终返回。
END
相关文章
- 423世界读书日,知乎推荐+知识付费目录的统计2021.4.23
- MongoDB脚本:集合中字段数据大小的分位数统计
- 每日统计部门人员考勤打卡情况并汇总通知
- Typecho 网站总访客数统计加在线人数代码
- Python配对交易策略统计套利量化交易分析股票市场|附代码数据
- 统计系列(一)统计基础
- 统计系列(二)常见的概率分布
- 统计系列(四)利用Python进行假设检验
- PostgreSQL 数据库基础 动态统计某一列的某一值出现的次数SQL
- 深入流量统计:在Linux上实现(流量统计linux)
- 如何统计一段英文中的单词的个数详解编程语言
- Oracle索引统计优化,提高数据库性能(oracle索引统计)
- Linux文件个数统计:快速搞定妙招(linux文件个数统计)
- MySQL 查询表的统计数量(mysql查询表的数量)
- Linux系统下的流量统计分析(linux 流量 统计)
- MySQL高级分组统计,轻松掌握数据分析技巧(mysql中分组统计高级)
- Oracle数据库一周使用统计分析(oracle 一周统计)
- 使用Redis统计访问用户数(redis访问用户数统计)
- 统计Oracle HR号码统计聚焦洞察人力资源数据(oracle hr 号码)
- python数据结构之二叉树的统计与转换实例