python - 在python中计算形成GP系列的三元组的数量
问题描述
问题陈述是:
给定一个数组,您需要找到索引 (i,j,k) 的三元组的数量,使得这些索引处的元素对于给定的公比 r 和 i<j<k 呈几何级数。例如,arr=[1,4,16,64]。如果 r=4,我们在索引 (0,1,2) 和 (1,2,3) 处有 [1,4,16] 和 [4,16,64]。
我有一个解决方案,但我无法理解。谁能帮我吗?
def countTriplets(arr, r):
count = 0
dict = {}
dictPairs = {}
for i in reversed(arr):
if i*r in dictPairs:
count += dictPairs[i*r]
if i*r in dict:
dictPairs[i] = dictPairs.get(i, 0) + dict[i*r]
dict[i] = dict.get(i, 0) + 1
return count
解决方案
上面的程序利用两个字典来跟踪可能的三元组;
现在,从头开始(因为我们有一个给定的约束 i < j < k)
dict 跟踪元素 i,dictPairs 跟踪元素 i*r。
现在,我们检查以下内容;
- 如果 dictPairs 中存在元素 i*r,如果存在则存在三元组 (i, i*r, i*r*r)
- 如果 dict 中存在元素 i*r,如果存在则存在一对 (i, i*r)
- 如果它们都不存在,我们将其添加到 dict 中,使其成为未来三胞胎的候选者
始终建议跟踪算法以更好地了解它的工作原理,
假设我们有一个数组 [1,2,8,3,4,6,12] 并给定共同比率 2。
现在,从最后开始,
最初;
dict = {}
dictPairs = {}
元素 12 ==> 检查 dict 或 dictPairs 中是否存在 12*2 ==> 两者都不存在 ==> 将其添加到 dict
dict = {12 : 1} dictPairs = {}
元素 6 ==> 检查 dict 或 dictPairs 中是否存在 6*2 ==> 存在于 dict ==> 将其添加到 dictPairs
dict = {12 : 1} dictPairs = {6 : 1}
元素 4 ==> 检查 dict 或 dictPairs 中是否存在 4*2 ==> 两者都不存在 ==> 将其添加到 dict
dict = {12 : 1, 4 : 1} dictPairs = {6 : 1}
元素 3 ==> 检查 dict 或 dictPairs 中是否存在 3*2 ==> 存在于 dictPairs ==> 增加计数
dict = {12 : 1, 4 : 1} dictPairs = {6 : 1}
元素 8 ==> 检查 dict 或 dictPairs 中是否存在 8*2 ==> 两者都不存在 ==> 将其添加到 dict
dict = {12 : 1, 4 : 1, 8 : 1} dictPairs = {6 : 1}
元素 2 ==> 检查 2*2 是否存在于 dict 或 dictPairs ==> 存在于 dict ==> 将其添加到 dictPairs
dict = {12 : 1, 4 : 1, 8 : 1} dictPairs = {6 : 1, 2 : 1}
元素 1 ==> 检查 dict 或 dictPairs 中是否存在 1*2 ==> 存在于 dictPairs ==> 增加计数
dict = {12 : 1, 4 : 1, 8 : 1} dictPairs = {6 : 1, 2 : 1}
您可以看到三元组 (2, 4 , 8) 没有被选中,因为它们没有按顺序排列。
需要注意的一件事是巧妙地使用 dict.get() 函数来添加新条目。检查 dict.get() 是如何工作的
推荐阅读
- amazon-emr - 即使在指定 hadoopConfigs 之后,Spark 也无法写入 S3 加密存储桶
- javascript - 谷歌控制台错误“未捕获的类型错误:无法读取 null 的属性‘样式’”
- java - 如何在spring data jpa中基于动态查询检索/显示列名及其数据?
- javascript - 使用 html 表单进行验证仅给出 if 语句
- flutter - 颤振:从 Firestore 文档中获取标记到谷歌地图,但不显示
- java - Spring Boot Security - 如果缺少授权标头,则使用 Cookie 中的令牌
- c# - 如何在 X 秒后销毁一个对象?
- php - MySql匹配获取列值靠近其他列的记录(低于阈值)
- android - 尝试分离/关闭 Firestore 快照(Android)时,条件“listenerReg!= null”始终为“真”
- python - scrapy 限制域的请求数量