给定一个int数组作为输入,如果可以将数组拆分为两个,则返回true,以便左边数字的总和等于右边数字的总和。
MyApproach
我从正面和背面添加元素直到它们的长度的一半并添加了它们的Sum.When我发现它们相等我返回true,否则我返回false
public boolean canSplit(int[] arr)
{
int k=0;
int SumF[]=new int[1];
int SumB[]=new int[1];
for(int i=0;i<arr.length/2;i++)
{
SumF[k]=arr[i]+SumF[k];
}
for(int j=arr.length-1;j>=arr.length/2;j--)
{
SumB[k]=arr[j]+SumB[k];
}
if(SumF==SumB)
return true;
else
return false;
}
Parameters Actual Output Expected Output
'{10,11,12,5,4}' false true
MyQuestion:任何人都可以指导我做错了吗?
答案 0 :(得分:4)
问题不在于分割 half 而只是分成两个。现在,您只需检查一个特定方式来拆分数组。你必须检查所有方法。
这样做的一种方法是找到数组中所有数字的总和,然后循环数字,计算到那个地方的所有数字的运行总和,看看是否有一半的数字。总和。
public static boolean canSplit(int[] array) {
int total = IntStream.of(array).sum();
int sum = 0;
for (int i : array) {
sum += i;
if (sum == total - sum) return true;
}
return false;
}