将数组中的每个数字添加到数组中的每个其他数字

时间:2014-02-22 08:27:51

标签: objective-c macos

如何将每个对象(NSNumber对象)添加到数组中的每个其他NSNumber对象,并将sum对象添加到新数组中?

e.g。

array1 has numbers 1, 2, and 3.
then do:
1 + 1 = 2 then add 2 to array2.
1 + 2 = 3 then add 3 to array2.
1 + 3 = 5 then add 4 to array2.

2 + 1 = 3 then add 3 to array2.
2 + 2 = 4 then add 4 to array2.
2 + 3 = 5 then add 5 to array2.

3 + 1 = 4 then add 4 to array2.
3 + 2 = 5 then add 5 to array2.
3 + 3 = 6 then add 6 to array2.

So array2 has 2, 3, 4, 3, 4, 5, 4, 5, 6.

我可以处理删除重复项。我已经尝试在另一个for循环中放置一个for循环,这基本上可以完成我上面概述的但我有超过28,000个数字,而不是数字1 - 28,000。计算花了很长时间,因为有28,000 ^ 2个可能的总和。当然必须有另一种方式。有人可以详细说明吗?

2 个答案:

答案 0 :(得分:1)

如果你有一组N个随机数并且必须互相添加,我不确定这不是O(N²)。

计算所有数字会导致784.000.000总和,然后才能使用它们。使用32位整数(不是NSNumber实例对象),内存占用量几乎为3 GB。

你必须实现这个懒惰(“每个按需求和”)

答案 1 :(得分:0)

这样的事,也许是

NSMutableArray *myNewArray = [NSMutableArray array];
NSUInteger length = myArray.length;  // or size?? I don't remember 
for (NSUinteger i=0; i=0<length; i++)
    for (NSUinteger j=i; j=0<length; j++)
        [myNewArray addObject:([array objectAtIndex:i] + [array objectAtIndex:j])];

这里的秘密是内部for循环j=i中的初始条件。例如,由于你已经完成了1 + 2的总和,你不再需要做2 + 1,因此不包括重复项,尽管你仍然可能有重复的结果(例如3 + 4 = 7; 1 + 6 = 7)。

而不是n ^ 2总和,你有n *(n + 1)/ 2总和......几乎是它的一半!