【发布时间】:2021-10-11 12:00:44
【问题描述】:
给定一个数字数组,查找是否有一种方法可以从数组中删除/删除一个数字并在数组中进行一个分区(将数组分成两个子数组),使得 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
现在已经存在一个类似的问题,我们只需要找到数组是否可以分为两个相等 sum 的子数组,可以在 O(n) =>
PsuedoCode:- 有效的解决方案涉及计算所有的总和 数组的元素提前。然后对于数组的每个元素, 我们可以通过使用总和在 O(1) 时间内计算它的正确和 数组元素减去到目前为止找到的元素的总和。时间复杂度 该解决方案的 O(n) 将是 O(n) 并且它使用的辅助空间将是 O(1)。
因此,要解决我们的问题,一种蛮力方法是:- 删除每个元素一次并检查数组是否可以分成两个相等和的子数组。因此它将需要 O(n^2) 时间。
那么我们能比这个时间复杂度做得更好吗?
【问题讨论】:
-
支点在哪里,输入的答案是什么,[10, -1, 1]?换句话说,分区的一侧可以没有元素吗?
-
两个分区必须至少包含一个元素。因此,对于您的示例,将不存在枢轴,我们可以返回 -1...只是想知道即使我们可以将任何一个分区保持为零,原始问题的“最佳方法”也可以修改以适应这一点,不是吗?跨度>
标签: arrays algorithm sub-array