Java 找到一个有效的算法,以降低大O复杂度

Java 找到一个有效的算法,以降低大O复杂度,java,algorithm,nested-loops,Java,Algorithm,Nested Loops,给定N个元素的排序数组。需要找到所有元素差异的绝对和。 例:给定4个元素1、2、3和4|1-2|+|1-3|+|1-4|+|2-3|+|2-4|+|3-4| = 10. 以下是我的java代码: List<Integer> a = new ArrayList<Integer>(); //just for understanding , the Array List is already filled with numbers public static int lsum

给定N个元素的排序数组。需要找到所有元素差异的绝对和。 例:给定4个元素1、2、3和4|1-2|+|1-3|+|1-4|+|2-3|+|2-4|+|3-4| = 10. 以下是我的java代码:

List<Integer> a = new ArrayList<Integer>(); //just for understanding , the Array List is already filled with numbers 
public static int lsum(int N)//consider the arraylist to be sorted in ascending order.
{
    int sum =0;

    for( int i=0;i<N;i++)
    {
        int w =a.get(i);
        for(int j =i;j<N;j++)
        {
            int z = a.get(j);
            sum =sum +(z-w);
        }

        }
    return(sum);

}
List a=new ArrayList()//为了便于理解,数组列表中已经填充了数字
public static int lsum(int N)//考虑按升序排序arraylist。
{
整数和=0;

对于(inti=0;i如果您首先对元素进行排序,则可以将运行时降到
O(nlogn)

这里的想法是,如果
a[]
是按排序顺序排列的整数列表,而
b[i]
a[i]
和其他数字之间的差值之和,那么
b[i+1]
可以根据
b[i]
i
a[i]-a[i]
和数组长度直接计算

我不想说具体如何,但这里有一个提示。
Math.abs(a[I+1]-a[j])
Math.abs(a[I]-a[j])
有多少不同?对于哪个
j
Math.abs(a[I+1]-a[j])
更大?对于哪个
j
来说更小


现在,在你计算完这些之后,
b[i]
s在它们之间包含每一个差两次。你想要的值就是它们的和除以2。

如果数组是
x\u 1,请转到。@Jeroenvanevel没有太多帮助,因此没有收到任何答案,因此重新发布。