我正在关注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)中解决,如果是的话算法,谢谢?
答案 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,你的算法告诉我们没有解决方案