Javascript 给定一个数字数组的可能三角形数

Javascript 给定一个数字数组的可能三角形数,javascript,algorithm,math,Javascript,Algorithm,Math,我试图在这里找到可以由一组数字组成的可能三角形的数量: 我已经编写了它的javaScript版本。但是,我并不真正理解解决方案的一部分: // Total number of possible triangles that can // be formed with the two fixed elements is // k - j - 1. The two fixed elements are arr[i] //

我试图在这里找到可以由一组数字组成的可能三角形的数量:

我已经编写了它的javaScript版本。但是,我并不真正理解解决方案的一部分:

        // Total number of possible triangles that can  
        // be formed with the two fixed elements is 
        //  k - j - 1.  The two fixed elements are arr[i] 
        // and arr[j].  All elements between arr[j+1]/ to  
        // arr[k-1] can form a triangle with arr[i] and arr[j]. 
        // One is subtracted from k because k is incremented  
        // one extra in above while loop. 
        // k will always be greater than j. If j becomes equal 
        // to k, then above loop will increment k, because arr[k] 
        //  + arr[i] is always greater than arr[k] 
问题:

我还是不明白这个逻辑。
k-j
是如何进入画面的?

用arr[i]、arr[j]和arr[k](用arr[i]k-j我对这部分不太清楚。

有人能启发我吗

问题的JS解决方案:

var triangalNumber=函数(arr){
设计数=0,n=arr.length;
//按升序对数组排序。
arr.sort((a,b)=>{返回a-b;});
//设置三个指针,i,j=i+1和k=i+2

对于(设i=0;i有
k-j
元素,从
j
之后的元素开始到
k
元素。它们都是三角形的有效第三边,以
arr[i]
arr[j]
作为前两条边


例如,如果前两个边是
arr[2]
arr[4]
,最高的
k
,其中
arr[i]+arr[j]>arr[k]
10
,你可以用
k=5、6、7、8、9或10
组成一个三角形。那里有6个索引,
10-4=6

是关于数学还是程序的问题?如果是关于数学的,那会更好。你在链接的页面上读过方法的第3步吗?它解释了
k-j
com是的。@Barmar我画了。但是我仍然无法画出下面的语句
Fix'I'和'j',并找到最右边的索引'k'(或最大的'arr[k]'),例如'arr[I]+arr[j]>arr[k]'。可以由'arr[I]'和'arr[j]组成的三角形的数量'因为两边都是'k–j'。将'k–j'添加到三角形的计数中。
我们如何证明k-j是计数?感谢您的时间。