排序数组和求复数O(n)

时间:2013-04-15 15:02:16

标签: arrays algorithm complexity-theory sorted

我们对数组arr[]={2,4,5,7,8,12,16,18,20}进行了排序。

我们需要找出加法为12且复杂度为O(n)的元素对。

有人可以提供帮助吗?

2 个答案:

答案 0 :(得分:2)

不幸的是,没有解决方案,只需要考虑一些事情就可以引导你朝着正确的方向前进:

请记住数组已排序,以下哪项是正确的?

   arr[x+1] + arr[y] < arr[x] + arr[y]
or arr[x+1] + arr[y] > arr[x] + arr[y]

   arr[x] + arr[y-1] < arr[x] + arr[y]
or arr[x] + arr[y-1] > arr[x] + arr[y]

如果你仔细考虑这些问题的答案(也许可以画出来),那么应该采用一种解决方案。

提示如何开始:

设x = 0,y = n-1 ...

答案 1 :(得分:1)

试试这个:

由于数组已排序,因此取第一个元素(arr [0])和最后一个元素(arr [8])的总和。 如果总和大于12,那么我们需要降低总和,所以我们用最大的数字替换下一个最大的数字(在这种情况下,arr [7]); 如果总和小于12,我们需要增加总和,所以我们用最小的数字替换最小的数字(在这种情况下,用arr [1]替换arr [0])。继续重复这个过程,直到得到你想要的总和,或者你总结的两个数字来自数组中的相同索引。