gpt4 book ai didi

arrays - 检查数组中所有 i
转载 作者:塔克拉玛干 更新时间:2023-11-03 03:49:41 24 4
gpt4 key购买 nike

我正在解决一个问题,我必须找到 Ai 的三元组数量, Aj , 和 Ak这样 Ak < Ai < Aji < j < k在数组中。

用蛮力解决这个问题很简单,但复杂度为 O(N^3)。解决这个问题的最佳方法是什么?

最佳答案

这是一种复杂度为 O(n^2) 的方法,它固定 i 并以相反的顺序遍历数组的其余部分,跟踪 a[i] 以下的元素数量。

def count_triplets(a):
"""Count the number of triplets a[k]<a[i]<a[j] for i<j<k"""
t = 0
for i,ai in enumerate(a):
kcount = 0 # The number of elements smaller than a[i]
for x in a[:i:-1]:
if x<ai:
kcount += 1
elif x>ai:
t += kcount
return t


A=[1,6,3,4,7,4]
print count_triplets(A)

实例

对于给定的数组数组,有趣的情况是 i 等于 1 且 ai 等于 6。

程序现在对数组中的剩余条目进行反向处理,如下所示:

x = 4
x < ai so kcount increased to 1
x = 7
x > ai so t increased by kcount, i.e. t increased to 1
x = 4
x < ai so kcount increased to 2
x = 3
x < ai so kcount increased to 3

i 的所有其他值根本不会增加 t,因此 t 的最终值为 1。

测试代码

Hackerrank 站点希望代码支持大量输入。下面的代码通过了所有测试。

N=input()
for n in range(N):
A=map(int,raw_input().split())
print count_triplets(A)

关于arrays - 检查数组中所有 i<j<k 的三元组数量的最佳方法,其中 a[k]<a[i]<a[j],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30280354/

24 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com