計算陣列的小和

2021-08-15 19:30:43 字數 1398 閱讀 8210

【題目】

陣列小和的定義如下:

例如,陣列s=[1,3,5,2,4,6],在s[0]的左邊小於或等於s[0]的數的和為0,在s[1]的左邊小於或等於s[1]的數的和為1,在s[2]的左邊小於或等於s[2]的數的和為1+3=4,在s[3]的左邊小於或等於s[3]的數的和為1,在s[4]的左邊小於或等於s[4]的數的和為1+3+2=6,在s[5]的左邊小於或等於s[5]的數的和為1+3+5+2+4=15,所以s的小和為0+1+4+1+6+15=27。

給定乙個陣列s,實現函式返回s的小和。

【**】

public

class

demo ;

system.out.println(smallsum(arr));//27

system.out.println(smallsum2(arr));//27

int arr1=new

int;

system.out.println(smallsum(arr1));//15

system.out.println(smallsum2(arr1));//15

} //計算陣列的小和

//方法1:時間複雜度o(n^2)

public

static

intsmallsum(int arr)

int dp=new

int[arr.length];

dp[0]=0;

int sum1=0;

for(int i=1;ifor(int j=i-1;j>=0;j--)

}sum1+=dp[i];

}return sum1;

}//方法2:時間複雜度o(nlogn),額外空間複雜度o(n)

public

static

intsmallsum2(int arr)

return func(arr,0,arr.length-1);//歸併排序

}private

static

intfunc(int s, int l, int r)

int mid=(l+r)/2;

return func(s,l,mid)+func(s,mid+1,r)+merge(s,l,mid,r);

//歸併排序的過程會進行拆組再合併,即:拆左組,拆右組,合併左右組

}private

static

intmerge(int s, int left, int mid, int right)

else

}for(;(j1)||(i1);j++,i++)

for(int k=0;k!=h.length;k++)

return sum;

}

計算陣列的小和

陣列小和的定義如下 例如,陣列s 1,3,5,2,4,6 在s 0 的左邊小於或等於s 0 的數的和為0 在s 1 的左邊小於或等於s 1 的數的和為1 在s 2 的左邊小於或等於s 2 的數的和為1 3 4 在s 3 的左邊小於或等於s 3 的數的和為1 在s 4 的左邊小於或等於s 4 的數的和...

陣列與矩陣 計算陣列的小和

題目 陣列小和的定義如下 例如 陣列s 1,3,5,2,4,6 在s 0 的左邊小於或者等於s 0 的數的和為0,在s 1 的左邊小於或等於s 1 的數的和為1 將所有位置的左邊比它小或者等於的數的和相加起來就是小和。給定乙個陣列,實現函式返回s的小和。基本思路 最簡單易懂的方法,就是依次遍歷陣列每...

計算陣列的子集

計算某個陣列的子集 在遞迴中不用 for迴圈和 visit 陣列,因為每個結果長度不一致,如果每個結果長度一致,比如求全排列,則需要用 for和 visit 但後者也可以用記錄層數的方式 public class main list li new arraylist fin nums,li,new ...