finding a pair of integers in a sorted array which sum to K

北城余情 提交于 2019-12-01 19:59:49

You may want to look at this blog post:

http://www.codingatwork.com/2011/07/array-sum/

My approach would be to do a binary search of the list for K/2, then walk one variable a left and another variable b right trying to find a solution a+b=K.

The idea would be to start a at the largest number less than or equal to K/2 and start b at the smallest number greater than a. Again, use a binary search to find a and let b be the next element in the array. Then

  • If a+b = K, then return (a,b).
  • If a+b < K, then move b to the right one position.
  • If a+b > K, then move a to the left one position.

Of course, you can skip the binary search and just start a at the beginning of the array and b at the end of the array, and then do

  • If a+b = K, then return (a,b).
  • If a+b < K, then move a to the right one position.
  • If a+b > K, then move b to the left one position.

This is probably faster.

There is a linear (O(n)) solution.

Take a hashtable and while iterating through the array check if the current element is already in the hashtable - if so then you've found the answer. Otherwise insert the number which is equal to K minus the current element. Works for non sorted array, btw.

int[] ar = new int[] { 1, 4, 3, 5 };
int K = 6;

HashSet<int> set = new HashSet<int>();
foreach (int a in ar)
{
    if (set.Contains(a))
    {
        Console.WriteLine(a + ", " + (K - a));
        break;
    }

    set.Add(K - a);
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!