【題目】
陣列小和的定義如下:
例如,陣列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 ...