checking if 2 numbers of array add up to I

后端 未结 15 2614
日久生厌
日久生厌 2020-12-15 01:13

I saw a interview question as follows: Give an unsorted array of integers A and and an integer I, find out if any two members of A add up to I.

any clues?

ti

相关标签:
15条回答
  • 2020-12-15 01:54

    This can be solved using the UNION-FIND algorithm, which can check in constant time whether an element is into a set.

    So, the algorithm would be so :

    foundsum0 = false;
    foreach (el: array) {
        if find (-x): foundsum0 = true;
        else union (x);
    }
    

    FIND and UNION are constant, O(1).

    0 讨论(0)
  • 2020-12-15 01:55

    here is a O(n) solution in java using O(n) extra space. This uses hashSet to implement it

    http://www.dsalgo.com/UnsortedTwoSumToK.php

    0 讨论(0)
  • 2020-12-15 01:57

    This might be possible in the following way: Before putting the elements into the hashmap, you can check if the element is greater than the required sum. If it is, you can simply skip that element, else you can proceed with putting it into the hashmap. Its a slight improvement on your algorithm, although the overall time still remains the same.

    0 讨论(0)
  • 2020-12-15 01:59

    PERL implementation to detect if a sorted array contains two integer that sum up to Number

    my @a = (11,3,2,9,12,15);
    my @b = sort {$a <=> $b} @a;
    
    my %hash;
    my $sum = 14;
    my $index = 0;
    foreach my $ele (@b) {
        my $sum_minus_ele = $sum - $ele;
        print "Trace: $ele :: $index :: $sum_minus_ele\n";
        if(exists($hash{$sum_minus_ele}) && $hash{$sum_minus_ele} != $index ) {
            print "\tElement: ".$ele." :: Sum-ele: ".$sum_minus_ele."\n";
        }
        $hash{$ele} = $index;
        $index++;
    }
    
    0 讨论(0)
  • 2020-12-15 02:00

    Insert the elements into hashtable.

    While inserting x, check if I-x already exists. O(n) expected time.

    Otherwise, sort the array ascending (from index 0 to n-1). Have two pointers, one at max and one at min (call them M and m respectively).

    If a[M] + a[m] > I then M-- 
    If a[M] + a[m] < I then m++
    If a[M] + a[m] == I you have found it
    If m > M, no such numbers exist.
    
    0 讨论(0)
  • 2020-12-15 02:00
    public static boolean findSum2(int[] a, int sum) {
            if (a.length == 0) {
                return false;
            }
            Arrays.sort(a);
    
    
            int i = 0;
            int j = a.length - 1;
            while (i < j) {
                int tmp = a[i] + a[j];
                if (tmp == sum) {
                    System.out.println(a[i] + "+" + a[j] + "=" + sum);
                    return true;
                } else if (tmp > sum) {
                    j--;
                } else {
                    i++;
                }
            }
            return false;
    }
    
    0 讨论(0)
提交回复
热议问题