Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 给定n个整数a1,a2,…,an和k。这些元素可以构成一个三角形的子数组长度k是多少?_Algorithm_Math - Fatal编程技术网

Algorithm 给定n个整数a1,a2,…,an和k。这些元素可以构成一个三角形的子数组长度k是多少?

Algorithm 给定n个整数a1,a2,…,an和k。这些元素可以构成一个三角形的子数组长度k是多少?,algorithm,math,Algorithm,Math,给定一组不同的正整数,假设它可以“构造一个三角形”,如果它可以划分为三个子集,其和可以是三角形三条边的长度(即:三个子集,其和满足条件)。例如,{1,2,3,4}可以通过将其划分为{1,2},3,4}来“构造三角形”,因为三角形的边长可以是1+2,3和4(因为1+2+3>4,1+2+4>3,3+4>1+2) 我得到了一个数组A,其中最多有105个在[0109]范围内的不同非负整数和一个整数k,我需要找出有多少个长度为k的连续子数组可以构造三角形。例如,如果A=[1,3,4,2,5,9]和k=3,

给定一组不同的正整数,假设它可以“构造一个三角形”,如果它可以划分为三个子集,其和可以是三角形三条边的长度(即:三个子集,其和满足条件)。例如,{1,2,3,4}可以通过将其划分为{1,2},3,4}来“构造三角形”,因为三角形的边长可以是1+2,3和4(因为1+2+3>4,1+2+4>3,3+4>1+2)

我得到了一个数组A,其中最多有105个在[0109]范围内的不同非负整数和一个整数k,我需要找出有多少个长度为k的连续子数组可以构造三角形。例如,如果A=[1,3,4,2,5,9]和k=3,则有两个这样的子阵列:[3,4,2]和[4,2,5]

我尝试了以下方法:

  • 迭代A,检查长度为k的每个连续子数组。
    • 对于每个这样的子阵列,将其每个分区分为三个子集。
      • 对于每个这样的划分,计算三个子集的和,并检查它们是否满足三角形不等式
  • 返回至少一个分区通过检查的子阵列数
这给出了正确的答案,但需要O(3kn)的时间,其中n是A的长度

我读过关于这个问题的O(n)算法,但我不明白它为什么会起作用:

  • 迭代A,检查长度为k的每个连续子数组。
    • 对于每个这样的子阵列,确定其总和S和最大元素aG,然后检查S是否>2aG。
      • 注#1:当且仅当情况如此时,子阵列可以构造三角形
      • 注#2:通过使用前缀和,可以在O(n)时间内确定所有子阵列的和
      • 注#3:所有子阵列的最大元素可通过使用deque在O(n)时间内确定
  • 返回至少一个分区通过检查的子阵列数
我在注释1中得到了这样的解释:

  • 设i为子阵列的第一个索引,j为其最后一个索引(即j=i+k)−1)
  • 假设我们已经对子阵列的元素进行了排序,因此Ai z,这相当于检查x+y+z>2z
  • 但我们可以在不进行实际排序的情况下进行检查:x+y+z是整个子阵列的总和,z是其最大的元素

我不明白的是-这个解释表明,如果我们以一种特定的方式划分子阵列,那么这个划分满足三角形等式当且仅当x+y+z>2z。但是如果我们用不同的方式划分子阵列呢?即使这个划分不满足三角形不等式,难道不能有一个不同的划分满足吗?

三角形不等式可以重述为(参见)

对于
x
y
z
的任何分区选择,我们有
max(x,y,z)>=A_j
。因此,如果您已经描述了分区

x=Ai+Ai+2+…+Aj−二,

y=Ai+1+Ai+3+…+Aj−一,

z=Aj

如果不满足不等式(即
x+y+z>2A_j
不成立),则任何其他分区也不会满足不等式

x+y+z > 2 max(x,y,z)