我们对数组arr[]={2,4,5,7,8,12,16,18,20}
进行了排序。
我们需要找出加法为12
且复杂度为O(n)
的元素对。
有人可以提供帮助吗?
答案 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])。继续重复这个过程,直到得到你想要的总和,或者你总结的两个数字来自数组中的相同索引。