从三个矩阵算法中找出给定的总和“总和”

时间:2013-07-21 00:04:42

标签: arrays algorithm

我正在关注this问题,我觉得这可以在O(NLogN)中解决。以下是我的算法:

 1. Sort list1 , list2, list3 i.e. O(NLogN)
 2. while indexA < size and indexB < size and indexC < size //here size is the array size
     int sum = a1[indexA] + a2[indexB] + a3[indexC]
     if sum < total then choose the minimum value from a1, a2, a3 and increment that index
     if sum > total print total can not be found and return
     if sum == total then print the indexes
    //this is  O(N)

因此所有总O(NLogN)。 请告诉我上述算法的正确性。

修改

由于 Muckle_ewe 已经解释过这个算法会在某些地方失败,所以没有必要进一步讨论算法而是请评论这个问题是否可以在O(NLogN)中解决,如果是的话算法,谢谢?

1 个答案:

答案 0 :(得分:3)

不会在

上失败
if sum < total then choose the minimum value from a1, a2, a3 and increment that index

线。请考虑以下计数器示例(伪代码)

list1 = [1, 10]
list2 = [2, 3]
list3 = [3, 4]

总计为7,其解为1 + 2 + 4(或1 + 3 + 3)。设indexA = indexB = indexC = 0.然后是初始总和

list1[0] + list2[0] + list3[0]
1 + 2 + 3 = 6

由于这小于7,我们增加了给出最小列表值的索引,即indexA为list1 [indexA] = 1.然后是和

list1[1] + list2[0] + list3[0]
10 + 2 + 3 = 15

由于这大于7,你的算法告诉我们没有解决方案