如何将每个对象(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个可能的总和。当然必须有另一种方式。有人可以详细说明吗?
答案 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总和......几乎是它的一半!