Find a pair of elements from an array whose sum equals a given number

后端 未结 30 1064
暗喜
暗喜 2020-11-22 10:14

Given array of n integers and given a number X, find all the unique pairs of elements (a,b), whose summation is equal to X.

The following is my solution, it is O(nLo

相关标签:
30条回答
  • 2020-11-22 10:56

    Implementation in Java : Using codaddict's algorithm:

    import java.util.Hashtable;
    public class Range {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Hashtable mapping = new Hashtable();
        int a[]= {80,79,82,81,84,83,85};
        int k = 160;
    
        for (int i=0; i < a.length; i++){
            mapping.put(a[i], i);
        }
    
        for (int i=0; i < a.length; i++){
            if (mapping.containsKey(k - a[i]) && (Integer)mapping.get(k-a[i]) != i){
                System.out.println(k-a[i]+", "+ a[i]);
            }
        }      
    
    }
    
    }
    

    Output:

    81, 79
    79, 81
    

    If you want duplicate pairs (eg: 80,80) also then just remove && (Integer)mapping.get(k-a[i]) != i from the if condition and you are good to go.

    0 讨论(0)
  • 2020-11-22 10:58

    In python

    arr = [1, 2, 4, 6, 10]
    diff_hash = {}
    expected_sum = 3
    for i in arr:
        if diff_hash.has_key(i):
            print i, diff_hash[i]
        key = expected_sum - i
        diff_hash[key] = i
    
    0 讨论(0)
  • 2020-11-22 10:58

    I bypassed the bit manuplation and just compared the index values. This is less than the loop iteration value (i in this case). This will not print the duplicate pairs and duplicate array elements also.

    public static void findSumHashMap(int[] arr, int key) {
        Map<Integer, Integer> valMap = new HashMap<Integer, Integer>();
        for (int i = 0; i < arr.length; i++) {
            valMap.put(arr[i], i);
        }
        for (int i = 0; i < arr.length; i++) {
            if (valMap.containsKey(key - arr[i])
                    && valMap.get(key - arr[i]) != i) {
                if (valMap.get(key - arr[i]) < i) {
                    int diff = key - arr[i];
                    System.out.println(arr[i] + " " + diff);
                }
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-22 10:58
     public static int[] f (final int[] nums, int target) {
        int[] r = new int[2];
        r[0] = -1;
        r[1] = -1;
        int[] vIndex = new int[0Xfff];
        for (int i = 0; i < nums.length; i++) {
            int delta = 0Xff;
            int gapIndex = target - nums[i] + delta;
            if (vIndex[gapIndex] != 0) {
                r[0] = vIndex[gapIndex];
                r[1] = i + 1;
                return r;
            } else {
                vIndex[nums[i] + delta] = i + 1;
            }
        }
        return r;
    }
    
    0 讨论(0)
  • 2020-11-22 10:58

    Solution in Python using list comprehension

    f= [[i,j] for i in list for j in list if j+i==X];
    

    O(N2)

    also gives two ordered pairs- (a,b) and (b,a) as well

    0 讨论(0)
  • 2020-11-22 10:59

    Implementation in Java : Using codaddict's algorithm (Maybe slightly different)

    import java.util.HashMap;
    
    public class ArrayPairSum {
    
    
    public static void main(String[] args) {        
    
        int []a = {2,45,7,3,5,1,8,9};
        printSumPairs(a,10);        
    
    }
    
    
    public static void printSumPairs(int []input, int k){
        Map<Integer, Integer> pairs = new HashMap<Integer, Integer>();
    
        for(int i=0;i<input.length;i++){
    
            if(pairs.containsKey(input[i]))
                System.out.println(input[i] +", "+ pairs.get(input[i]));
            else
                pairs.put(k-input[i], input[i]);
        }
    
    }
    }
    

    For input = {2,45,7,3,5,1,8,9} and if Sum is 10

    Output pairs:

    3,7 
    8,2
    9,1
    

    Some notes about the solution :

    • We iterate only once through the array --> O(n) time
    • Insertion and lookup time in Hash is O(1).
    • Overall time is O(n), although it uses extra space in terms of hash.
    0 讨论(0)
提交回复
热议问题