Quick actions

cmd+k|ctrl+k

Navigation

Languages

twoSum

Snippet info

Language

Java

Visibility

public

Author

sanjay.yerrolla

Created

2025-01-12T13:45:03.403641Z

Updated

2025-01-12T13:45:09.235435Z

import java.util.*;

class Main {
    public static void main(String[] args) {
        // given an array find the pair that equals to given sum
        
        // {1,2,3,5,6} --> sum = 4
        // {1,2,5, 9} --> sum = 4
        
        // Given sorted array, and only integers and can have negative numbers
        
        // if there is a matching pair return true, otherwise return false, return true if you find atleat one matching pair
        
        // main goal is find the efficient solution
        
        // Naive, brute force method
        
        int [] inputArray = {1,2,5,9,25,34,87};
       System.out.println(new Main().evaluateMatchingPairUsingTreeSet(inputArray, 33));
        
        
    }
    
     public boolean evaluateMatchingPairBruteForce(int[] input, int sum){
            
            for(int i = 0 ; i < input.length; i++){
                for(int j = i+1; j < input.length; j++){
                    int calSum = input[i] + input[j];
                    if(calSum == sum){
                        return true;
                    }
                }
            }
            return false;
        }
        
        // optimised code
        
        // I would consider the below approach where i add the first and last sum and if is more than the sum i will decrease the index or increase the index if greater than
        
        
        public boolean evaluateMatchingPair(int[] input, int sum){
            
            int higherIndex = input.length-1;
            int lowerIndex = 0;
            
            while(lowerIndex<higherIndex){
                int calSum = input[higherIndex] + input[lowerIndex];
                if(calSum == sum)
                    return true;
                else if(calSum < sum)
                    lowerIndex++;
                else
                    higherIndex--;
                
            }
            
            return false;
            
        }
        
        // the above solution only works for sorted numbers what if the numbers are not sorted how would you find
        // {1,3,2,5,6} --> sum = 4
        
        public boolean evaluateMatchingPairUsingTreeSet(int[] input, int sum){
            
            Set<Integer> comp = new TreeSet<>();
            
            for(int i =0; i<input.length; i++){
                if(comp.contains(input[i]))
                    return true;
                comp.add(sum-input[i]);
            }
            return false;
        }
}
INFO