方法名稱:
public static boolean equalSplit (int[] a)
如果您可以將陣列拆分為兩個并且值的總數相等,則回傳 true,例如:
{-3,5,12,14,-9,13} // returns true -3 5 14 = 12 (-9) 13
{-3,5,-12,14,-9,13}; //return false,you can split it to two groups but the groups won`t be equal 3 5 14 (-12)=-9 13
{-3,5,12,14,-9}; // false because can`t split the array to two
不允許更改陣列順序,只允許遞回,不允許回圈,只要遞回,私有方法就可以。
我寫的(代碼不完整):
public class Rec
{
// private method to find total sum of an array.
static int findSum(int A[], int N)
{
if (N <= 0)
return 0;
return (findSum(A, N - 1) A[N - 1]);
}
//
public static boolean equalSplit (int[] a)
{
return(equalSplit(a,0,0));
}
// override
private static boolean equalSplit (int[] a,int sum,int i)
{
int totalSum = findSum(a,a.length); // total sum of the given array.
if(i > a.length) // run until reach the end of the array.
return false;
if(totalSum - sum == sum) // if subtracting the recursive sum from total sum gives equal number return true
return true;
int take = equalSplit(a,sum a[i] , i 1); // boolean cannot be convereted to int
}
}
我想要做的是:我使用私有方法來查找整個陣列的總和,并從總和中減去。假設對陣列逐步求和的主要方法中的總和。我的問題是該方法是布林值,我不知道如何遞回使用布爾方法來完成它。
我的問題:你能告訴我結構是否好?我應該如何處理它?
uj5u.com熱心網友回復:
這是一個不使用回圈且不更改訂單的解決方案,
static int[] arrA, arrB;
public static boolean equalSplit(int[] arr) {
//Step 1
if (arr.length % 2 == 0) {
int sumA = 0, sumB = 0; // Two int variables to store the value of sum.
// Initializing the two new arrays with equal length.
arrA = new int[arr.length / 2];
arrB = new int[arr.length / 2];
// Copying the elements from the given array to the new arrays.
arrA = createArray(arrA, 0, arr, 0);
arrB = createArray(arrB, 0, arr, arr.length / 2);
//Calculating and storing the sum in the variables.
sumA = arraySum(arrA, arrA.length);
sumB = arraySum(arrB, arrB.length);
return sumA == sumB; // Checking the codition
} else {
return false;
}
}
private static int[] createArray(int[] arr, int index, int[] copyFrom, int copyFromIndex) {
if(index == arr.length) return arr;
arr[index] = copyFrom[copyFromIndex];
index ;
copyFromIndex ;
return createArray(arr, index, copyFrom, copyFromIndex);
}
private static int arraySum(int[] arr, int N) {
if (N <= 0) return 0;
return (arraySum(arr, N - 1) arr[N - 1]);
}
我對這個問題的態度是,
步驟 1 -> 檢查是否可以將給定的陣列拆分為兩個相等的陣列。如果是,接下來是第 2 步或回傳 false 而沒有任何進一步的步驟。
步驟 2 -> 使用遞回將給定的陣列元素復制到兩個不同但相等的陣列中。
步驟 3 -> 對新填充的兩個陣列求和并將其存盤在兩個不同的變數中。
第 4 步 -> 如果兩個新填充的陣列的總和相等,則函式回傳 true 否則回傳 false。
解釋 :
創建兩個新的整數陣列,只有當給定的陣列可以分成兩個相等的部分時,它們才會被填充。這是
arrA和arrB。檢查給定陣列的長度是否可以被二整并有0個余數,因為這可以回答“這個陣列可以分為兩個相等的部分嗎?”的問題。這個答案中的一段代碼是
arr.length % 2 == 0. 如果給定的陣列僅滿足此條件,則將執行下面給出的步驟,否則將回傳 false。初始化兩個整數變數以存盤兩個等分陣列的 Sum 值。
初始化兩個新創建的陣列,陣列長度為給定陣列的一半,即
arr.length / 2。然后將給定陣列元素的前半部分復制到第一個新初始化的陣列,然后將后半部分復制到第二個陣列。為了實作這個
createArray(int[] arr, int index, int[] copyFrom, int copyFromIndex)方法被使用。arr 是傳遞要復制到的陣列的引數,index 應該是 0 因為它用作新創建的陣列的索引,copyFrom 是給定陣列的引數,其中包含所有元素,copyFromIndex 用于開始復制給定索引中的元素。然后使用遞回函式計算總和并將其存盤在之前創建的單獨變數中。這里使用的函式是
arraySum(int[] arr, int N).回傳兩個 sum 變數是否相等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386030.html
