方法名称:
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
}
}
我想做的是:我使用一个私有方法来求整个数组的和,然后从总和中减去。主方法中假设逐步求和数组的和。我的问题是这个方法是布尔的,我不知道如何递归地使用布尔方法来完成它。
我的问题:你能告诉我结构是否好吗?我该怎么做?
这是一个不使用循环、不改变顺序的解决方案,
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]);
}
我对这个问题的看法是,
第一步-
步骤2-
第三步-
步骤4-
说明:
>
创建两个新的整数数组,只有当给定的数组可以被分成两个相等的部分时,才会被填充。这里是arrA
和arrB
。
检查给定数组的长度是否可以被2除,并且是否有0个余数,因为这可以回答“此数组可以被分成两个相等的部分吗?”。这个答案中的代码是arr.length%2==0
。如果给定数组仅满足此条件,则将执行下面给出的步骤,否则将返回false。
初始化两个整数变量以存储两个等分数组的Sum值。
初始化两个新创建的数组,数组长度为给定数组的一半,即arr.length/2
。
然后将给定数组元素的前半部分复制到第一个新初始化的数组中,然后将第二部分复制到第二个数组中。为了实现这个createArray(int[]arr,int index,int[]copyFrom,int copyFromIndex)
方法被使用。arr是传递应复制到的数组的参数,索引应为0,因为它用作新创建数组的索引,copyFrom是包含所有元素的给定数组的参数,copyFromIndex用于开始从给定索引复制元素。
然后使用递归函数计算总和,并将其存储在之前创建的单独变量中。这里使用的函数是arraySum(int[]arr, int N)
。
返回两个总和变量是否相等。
我正在通过CodingBat解决以下问题: 给定一个整数数组,是否可以将整数分成两组,使一组的和为10的倍数,另一组的和为奇数。每个int必须在一个组或另一个组中。编写一个递归助手方法,该方法接受您喜欢的任何参数,并从splitOdd10()对递归助手进行初始调用。(不需要循环。) 我在SO上找到了一篇文章,讨论了一个类似的话题:是否有可能将一个数组分成两个具有相等乘积的数组,并尝试通过类比编写代
我想检查是否可以将一个数组拆分为具有相同和的连续子数组。拆分数组还意味着删除数组的边框元素。 例如,要将其拆分为3个部分,我们需要删除到元素 通过删除这2个元素,就有3个相同和的连续子数组,和。 因此,如果可以将数组拆分为3个部分(等和)并删除它们之间的边界,则应返回true,否则应返回false。 返回的示例是。因为删除2个元素后,它将有4个元素,这些元素不能分组为3个相等的和 我不知道如何处理
我有一个PHP数组,其中包含一组用户。每个用户都属于一个团队。阵列将如下所示。 $Array=Array('User1','User2','User3','User4','User5'); 我需要得出以下逻辑。 如果“User1”和“User2”属于同一个名为“Team1”的团队,而其他用户拥有单独的唯一团队,则应按如下所示对阵列重新排序。 $Array=Array('User1','User3'
给定一个数字数组,查找是否有方法从数组中删除/移除一个数字,并在数组中进行一个分区(将数组划分为两个子数组),以使子数组1中的元素和等于子数组2中的元素和。 现在让我们考虑一个例子:- 现在一个类似的问题已经存在,我们只需要,找到是否数组可以被分成两个子数组相等的和,可以在O(n) =中完成 伪代码:-有效的解决方案包括提前计算阵列中所有元素的总和。然后,对于数组中的每个元素,我们可以通过使用数组
问题内容: 当每个块的总和大致相等时,如何将数组分成两个块? 问题答案: 像这样: 测试:
问题内容: 想象一下,我有一个这样的JS数组: 我想要的是将该数组拆分为N个较小的数组。例如: 对于Python,我有这个: 对于JS,我可以提出的最佳解决方案是递归函数,但我不喜欢它,因为它既复杂又丑陋。这个内部函数返回一个像这样的数组[1,2,3,null,4,5,6,null,7,8],然后我必须再次循环并手动拆分它。(我的第一次尝试是返回此:[1、2、3,[4、5、6,[7、8、9]]],