如果可以删除任何一个元素,则查找是否可以将数组分为相等和的两个子数组
给定一个数字数组,查找是否有办法从数组中删除/移除一个数字并在数组中进行一个分区(将数组划分为两个子数组),使得 subarray1 中的元素总和等于 subarray2 中元素的总和.
A subarray is a contiguous part of array.
Array [1, 2, 3, 4] has (1), (1,2), (2,3,4),(1,2,3,4) etc.. as its subarrays but not (1,3) , (2,4) , (1,3,4), etc..
现在让我们考虑一个例子:-
(Follow 0-based indexing )
Array[] = [ 6, 2, 2, 1, 3 ]
Possible solutions
Delete Array[0] => updated array: - [ 2,2,1,3 ]
Possible partition : - [2,2] and [3,1] where (2+2) = (3+1) = 4
or
Delete Array[1] => updated array: - [ 6,2,1,3 ]
Possible partition : - [6] and [2,1,3] where (6) = (2+1+3) = 6
or
Delete Array[2] => updated array: - [ 6,2,1,3 ]
Possible partition : - [6] and [2,1,3] where (6) = (2+1+3) = 6
现在一个类似的问题已经存在,我们只需要找到数组是否可以分成两个相等和的子数组,可以在 O(n) =>
PsuedoCode:- 有效的解决方案涉及提前计算数组所有元素的总和。然后对于数组的每个元素,我们可以通过使用数组元素的总和减去到目前为止找到的元素的总和来计算其在 O(1) 时间内的正确和。该解决方案的时间复杂度为 O(n),其使用的辅助空间为 O(1)。
因此,要解决我们的问题,一种蛮力方法是:- 删除每个元素一次并检查数组是否可以分为两个等和的子数组。因此它将需要 O(n^2) 时间。
那么我们可以做得比这个时间复杂度更好吗?