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

Algorithm

Algorithm Problem Overview


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(nLog(n)+n), but I am not sure whether or not it is optimal.

int main(void)
{
	int arr [10] = {1,2,3,4,5,6,7,8,9,0};
	findpair(arr, 10, 7);
}
void findpair(int arr[], int len, int sum)
{
	std::sort(arr, arr+len);
	int i = 0;
	int j = len -1;
	while( i < j){
		while((arr[i] + arr[j]) <= sum && i < j)
		{
			if((arr[i] + arr[j]) == sum)
				cout << "(" << arr[i] << "," << arr[j] << ")" << endl;
			i++;
		}
		j--;
		while((arr[i] + arr[j]) >= sum && i < j)
		{
			if((arr[i] + arr[j]) == sum)
				cout << "(" << arr[i] << "," << arr[j] << ")" << endl;
			j--;
		}
	}
}

Algorithm Solutions


Solution 1 - Algorithm

There are 3 approaches to this solution:

Let the sum be T and n be the size of array

Approach 1:
The naive way to do this would be to check all combinations (n choose 2). This exhaustive search is O(n2).

Approach 2: 
 A better way would be to sort the array. This takes O(n log n)
Then for each x in array A, use binary search to look for T-x. This will take O(nlogn).
So, overall search is  O(n log n)

Approach 3 :
The best way would be to insert every element into a hash table (without sorting). This takes O(n) as constant time insertion.
Then for every x, we can just look up its complement, T-x, which is O(1).
Overall the run time of this approach is O(n).


You can refer more http://k2code.blogspot.in/2012/01/given-integer-array-and-number-x-find.html">here</a></b>.Thanks.


Solution 2 - Algorithm

# Let arr be the given array.
# And K be the give sum


for i=0 to arr.length - 1 do
  # key is the element and value is its index.
  hash(arr[i]) = i  
end-for

for i=0 to arr.length - 1 do
  # if K-th element exists and it's different then we found a pair
  if hash(K - arr[i]) != i  
    print "pair i , hash(K - arr[i]) has sum K"
  end-if
end-for

Solution 3 - Algorithm

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.

Solution 4 - Algorithm

Solution in java. You can add all the String elements to an ArrayList of strings and return the list. Here I am just printing it out.

void numberPairsForSum(int[] array, int sum) {
	HashSet<Integer> set = new HashSet<Integer>();
	for (int num : array) {
		if (set.contains(sum - num)) {
			String s = num + ", " + (sum - num) + " add up to " + sum;
			System.out.println(s);
		}
		set.add(num);
	}
}

Solution 5 - Algorithm

Python Implementation:

import itertools
list = [1, 1, 2, 3, 4, 5,]
uniquelist = set(list)
targetsum = 5
for n in itertools.combinations(uniquelist, 2):
    if n[0] + n[1] == targetsum:
        print str(n[0]) + " + " + str(n[1])

Output:

1 + 4
2 + 3

Solution 6 - Algorithm

C++11, run time complexity O(n):

#include <vector>
#include <unordered_map>
#include <utility>

std::vector<std::pair<int, int>> FindPairsForSum(
        const std::vector<int>& data, const int& sum)
{
    std::unordered_map<int, size_t> umap;
    std::vector<std::pair<int, int>> result;
    for (size_t i = 0; i < data.size(); ++i)
    {
        if (0 < umap.count(sum - data[i]))
        {
            size_t j = umap[sum - data[i]];
            result.push_back({data[i], data[j]});
        }
        else
        {
            umap[data[i]] = i;
        }
    }

    return result;
}

Solution 7 - Algorithm

Here is a solution witch takes into account duplicate entries. It is written in javascript and assumes array is sorted. The solution runs in O(n) time and does not use any extra memory aside from variable.

var count_pairs = function(_arr,x) {
  if(!x) x = 0;
  var pairs = 0;
  var i = 0;
  var k = _arr.length-1;
  if((k+1)<2) return pairs;
  var halfX = x/2; 
  while(i<k) {
    var curK = _arr[k];
    var curI = _arr[i];
    var pairsThisLoop = 0;
    if(curK+curI==x) {
      // if midpoint and equal find combinations
      if(curK==curI) {
        var comb = 1;
        while(--k>=i) pairs+=(comb++);
        break;
      }
      // count pair and k duplicates
      pairsThisLoop++;
      while(_arr[--k]==curK) pairsThisLoop++;
      // add k side pairs to running total for every i side pair found
      pairs+=pairsThisLoop;
      while(_arr[++i]==curI) pairs+=pairsThisLoop;
    } else {
      // if we are at a mid point
      if(curK==curI) break;
      var distK = Math.abs(halfX-curK);
      var distI = Math.abs(halfX-curI);
      if(distI > distK) while(_arr[++i]==curI);
      else while(_arr[--k]==curK);
    }
  }
  return pairs;
}

I solved this during an interview for a large corporation. They took it but not me. So here it is for everyone.

Start at both side of the array and slowly work your way inwards making sure to count duplicates if they exist.

It only counts pairs but can be reworked to

  • find the pairs
  • find pairs < x
  • find pairs > x

Enjoy!

Solution 8 - Algorithm

O(n)

def find_pairs(L,sum):
    s = set(L)
    edgeCase = sum/2
    if L.count(edgeCase) ==2:
    	print edgeCase, edgeCase
	s.remove(edgeCase)    	
    for i in s:
        diff = sum-i
        if diff in s: 
            print i, diff
                    
                
L = [2,45,7,3,5,1,8,9]
sum = 10          
find_pairs(L,sum)
        

Methodology: a + b = c, so instead of looking for (a,b) we look for a = c - b

Solution 9 - Algorithm

Just attended this question on HackerRank and here's my 'Objective C' Solution:

-(NSNumber*)sum:(NSArray*) a andK:(NSNumber*)k {
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    long long count = 0;
    for(long i=0;i<a.count;i++){
        
        if(dict[a[i]]) {
            count++;
            NSLog(@"a[i]: %@, dict[array[i]]: %@", a[i], dict[a[i]]);
        }
        else{
            NSNumber *calcNum = @(k.longLongValue-((NSNumber*)a[i]).longLongValue);
            dict[calcNum] = a[i];
        }
    
    }
    return @(count);
}

Hope it helps someone.

Solution 10 - Algorithm

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.

Solution 11 - Algorithm

this is the implementation of O(n*lg n) using binary search implementation inside a loop.

#include <iostream>

using namespace std;

bool *inMemory;


int pairSum(int arr[], int n, int k)
{
	int count = 0;

	if(n==0)
		return count;
	for (int i = 0; i < n; ++i)
	{
		int start = 0;
		int end = n-1;		
		while(start <= end)
		{
			int mid = start + (end-start)/2;
			if(i == mid)
				break;
			else if((arr[i] + arr[mid]) == k && !inMemory[i] && !inMemory[mid])
			{
				count++;
				inMemory[i] = true;
				inMemory[mid] = true;
			}
			else if(arr[i] + arr[mid] >= k)
			{
				end = mid-1;
			}
			else
				start = mid+1;
		}
	}
	return count;
}


int main()
{
	int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	inMemory = new bool[10];
	for (int i = 0; i < 10; ++i)
	{
		inMemory[i] = false;
	}
	cout << pairSum(arr, 10, 11) << endl;
	return 0;
}

Solution 12 - Algorithm

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

Solution 13 - Algorithm

Nice solution from Codeaddict. I took the liberty of implementing a version of it in Ruby:

def find_sum(arr,sum)
 result ={}
 h = Hash[arr.map {|i| [i,i]}]
 arr.each { |l| result[l] = sum-l  if h[sum-l] && !result[sum-l]  }
 result
end

To allow duplicate pairs (1,5), (5,1) we just have to remove the && !result[sum-l] instruction

Solution 14 - Algorithm

Here is Java code for three approaches:

  1. Using Map O(n), HashSet can also be used here.

  2. Sort array and then use BinarySearch to look for complement O(nLog(n))

  3. Traditional BruteForce two loops O(n^2)

    public class PairsEqualToSum {

    public static void main(String[] args) { int a[] = {1,10,5,8,2,12,6,4}; findPairs1(a,10); findPairs2(a,10); findPairs3(a,10);

    }

    //Method1 - O(N) use a Map to insert values as keys & check for number's complement in map static void findPairs1(int[]a, int sum){ Map pairs = new HashMap(); for(int i=0; i

    //Method2 - O(nlog(n)) using Sort static void findPairs2(int[]a, int sum){ Arrays.sort(a); for(int i=0; i0 && foundAtIndex != i) //to avoid situation where binarySearch would find the original and not the complement like "5" System.out.println("("+a[i]+","+(sum-a[i])+")"); } }

    //Method 3 - Brute Force O(n^2) static void findPairs3(int[]a, int sum){

     for(int i=0; i<a.length; i++){
     	for(int j=i; j<a.length;j++){
     		if(a[i]+a[j] == sum)
     			System.out.println("("+a[i]+","+a[j]+")");
     	}
     }
    

    }

    }

Solution 15 - Algorithm

A Simple program in java for arrays having unique elements:

import java.util.*;
public class ArrayPairSum {
	public static void main(String[] args) { 
		int []a = {2,4,7,3,5,1,8,9,5};
		sumPairs(a,10);  
	}

	public static void sumPairs(int []input, int k){
      Set<Integer> set = new HashSet<Integer>();    
      for(int i=0;i<input.length;i++){

        if(set.contains(input[i]))
            System.out.println(input[i] +", "+(k-input[i]));
        else
        	set.add(k-input[i]);
       }
	}
}

Solution 16 - Algorithm

A simple Java code snippet for printing the pairs below:

    public static void count_all_pairs_with_given_sum(int arr[], int S){
        if(arr.length < 2){
        return;
    }        
    HashSet values = new HashSet(arr.length);
    for(int value : arr)values.add(value);
    for(int value : arr){
        int difference = S - value;
    if(values.contains(difference) && value<difference){
        System.out.printf("(%d, %d) %n", value, difference);
        }
    }
    }

Solution 17 - Algorithm

Another solution in Swift: the idea is to create an hash that store values of (sum - currentValue) and compare this to the current value of the loop. The complexity is O(n).

func findPair(list: [Int], _ sum: Int) -> [(Int, Int)]? {
    var hash = Set<Int>() //save list of value of sum - item.
    var dictCount = [Int: Int]() //to avoid the case A*2 = sum where we have only one A in the array
    var foundKeys  = Set<Int>() //to avoid duplicated pair in the result.
    
    var result = [(Int, Int)]() //this is for the result.
    for item in list {
        
        //keep track of count of each element to avoid problem: [2, 3, 5], 10 -> result = (5,5)
        if (!dictCount.keys.contains(item)) {
            dictCount[item] = 1
        } else {
            dictCount[item] = dictCount[item]! + 1
        }
        
        //if my hash does not contain the (sum - item) value -> insert to hash.
        if !hash.contains(sum-item) {
            hash.insert(sum-item)
        }
        
        //check if current item is the same as another hash value or not, if yes, return the tuple.
        if hash.contains(item) &&
            (dictCount[item] > 1 || sum != item*2) // check if we have item*2 = sum or not.
        {
            if !foundKeys.contains(item) && !foundKeys.contains(sum-item) {
                foundKeys.insert(item) //add to found items in order to not to add duplicated pair.
                result.append((item, sum-item))
            }
        }
    }
    return result
}

//test:
let a = findPair([2,3,5,4,1,7,6,8,9,5,3,3,3,3,3,3,3,3,3], 14) //will return (8,6) and (9,5)

Solution 18 - Algorithm

My Solution - Java - Without duplicates

    public static void printAllPairSum(int[] a, int x){
    System.out.printf("printAllPairSum(%s,%d)\n", Arrays.toString(a),x);
    if(a==null||a.length==0){
        return;
    }
    int length = a.length;
    Map<Integer,Integer> reverseMapOfArray = new HashMap<>(length,1.0f);
    for (int i = 0; i < length; i++) {
        reverseMapOfArray.put(a[i], i);
    }

    for (int i = 0; i < length; i++) {
        Integer j = reverseMapOfArray.get(x - a[i]);
        if(j!=null && i<j){
            System.out.printf("a[%d] + a[%d] = %d + %d = %d\n",i,j,a[i],a[j],x);
        }
    }
    System.out.println("------------------------------");
}

Solution 19 - Algorithm

I can do it in O(n). Let me know when you want the answer. Note it involves simply traversing the array once with no sorting, etc... I should mention too that it exploits commutativity of addition and doesn't use hashes but wastes memory.


using System; using System.Collections.Generic;

/* An O(n) approach exists by using a lookup table. The approach is to store the value in a "bin" that can easily be looked up(e.g., O(1)) if it is a candidate for an appropriate sum.

e.g.,

for each a[k] in the array we simply put the it in another array at the location x - a[k].

Suppose we have [0, 1, 5, 3, 6, 9, 8, 7] and x = 9

We create a new array,

indexes value

9 - 0 = 9     0
9 - 1 = 8     1
9 - 5 = 4     5
9 - 3 = 6     3
9 - 6 = 3     6
9 - 9 = 0     9
9 - 8 = 1     8
9 - 7 = 2     7

THEN the only values that matter are the ones who have an index into the new table.

So, say when we reach 9 or equal we see if our new array has the index 9 - 9 = 0. Since it does we know that all the values it contains will add to 9. (note in this cause it's obvious there is only 1 possible one but it might have multiple index values in it which we need to store).

So effectively what we end up doing is only having to move through the array once. Because addition is commutative we will end up with all the possible results.

For example, when we get to 6 we get the index into our new table as 9 - 6 = 3. Since the table contains that index value we know the values.

This is essentially trading off speed for memory. */

namespace sum
{
	class Program
	{
		static void Main(string[] args)
		{
			int num = 25;
			int X = 10;
			var arr = new List<int>();
			for(int i = 0; i <= num; i++) arr.Add((new Random((int)(DateTime.Now.Ticks + i*num))).Next(0, num*2));
			Console.Write("["); for (int i = 0; i < num - 1; i++) Console.Write(arr[i] + ", "); Console.WriteLine(arr[arr.Count-1] + "] - " + X);
			var arrbrute = new List<Tuple<int,int>>();
			var arrfast = new List<Tuple<int,int>>();

			for(int i = 0; i < num; i++)
			for(int j = i+1; j < num; j++)
				if (arr[i] + arr[j] == X) 
					arrbrute.Add(new Tuple<int, int>(arr[i], arr[j]));

			
			
			
			int M = 500;
			var lookup = new List<List<int>>();
			for(int i = 0; i < 1000; i++) lookup.Add(new List<int>());
			for(int i = 0; i < num; i++)		
			{
				// Check and see if we have any "matches"
				if (lookup[M + X - arr[i]].Count != 0)
				{
					foreach(var j in lookup[M + X - arr[i]])
					arrfast.Add(new Tuple<int, int>(arr[i], arr[j])); 
				}

				lookup[M + arr[i]].Add(i);

			}

			for(int i = 0; i < arrbrute.Count; i++)
				Console.WriteLine(arrbrute[i].Item1 + " + " + arrbrute[i].Item2 + " = " + X);
			Console.WriteLine("---------");
			for(int i = 0; i < arrfast.Count; i++)
				Console.WriteLine(arrfast[i].Item1 + " + " + arrfast[i].Item2 + " = " + X);
								
			Console.ReadKey();
		}
	}
}

Solution 20 - Algorithm

This prints the pairs and avoids duplicates using bitwise manipulation.

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);
	
	int indicesVisited = 0; 
	for(int i=0;i<arr.length;i++) {
		if(valMap.containsKey(key - arr[i]) && valMap.get(key - arr[i]) != i) {
			if(!((indicesVisited & ((1<<i) | (1<<valMap.get(key - arr[i])))) > 0)) {
				int diff = key-arr[i];
				System.out.println(arr[i] + " " +diff);
				indicesVisited = indicesVisited | (1<<i) | (1<<valMap.get(key - arr[i]));
			}
		}
	}
}

Solution 21 - Algorithm

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);
			}
		}
	}
}

Solution 22 - Algorithm

in C#:

        int[] array = new int[] { 1, 5, 7, 2, 9, 8, 4, 3, 6 }; // given array
        int sum = 10; // given sum
        for (int i = 0; i <= array.Count() - 1; i++)
            if (array.Contains(sum - array[i]))
                Console.WriteLine("{0}, {1}", array[i], sum - array[i]);

Solution 23 - Algorithm

One Solution can be this, but not optimul (The complexity of this code is O(n^2)):

public class FindPairsEqualToSum {

private static int inputSum = 0;

public static List<String> findPairsForSum(int[] inputArray, int sum) {
    List<String> list = new ArrayList<String>();
    List<Integer> inputList = new ArrayList<Integer>();
    for (int i : inputArray) {
        inputList.add(i);
    }
    for (int i : inputArray) {
        int tempInt = sum - i;
        if (inputList.contains(tempInt)) {
            String pair = String.valueOf(i + ", " + tempInt);
            list.add(pair);
        }
    }
    return list;
   }
}

Solution 24 - Algorithm

A simple python version of the code that find a pair sum of zero and can be modify to find k:

def sumToK(lst):
    k = 0  # <- define the k here
    d = {} # build a dictionary 

# build the hashmap key = val of lst, value = i
for index, val in enumerate(lst):
    d[val] = index

# find the key; if a key is in the dict, and not the same index as the current key
for i, val in enumerate(lst):
    if (k-val) in d and d[k-val] != i:
        return True

return False

The run time complexity of the function is O(n) and Space: O(n) as well.

Solution 25 - Algorithm

 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;
}

Solution 26 - Algorithm

less than o(n) solution will be=>

function(array,k)
          var map = {};
          for element in array
             map(element) = true;
             if(map(k-element)) 
                 return {k,element}

Solution 27 - Algorithm

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

Solution 28 - Algorithm

I implemented logic in Scala with out a Map. It gives duplicate pairs since the counter loops thru entire elements of the array. If duplicate pairs are needed, you can simply return the value pc

  val arr = Array[Int](8, 7, 2, 5, 3, 1, 5)
  val num = 10
  var pc = 0
  for(i <- arr.indices) {
    if(arr.contains(Math.abs(arr(i) - num))) pc += 1
  }

  println(s"Pairs: ${pc/2}")

It is working with duplicates values in the array as well.

Solution 29 - Algorithm

GOLANG Implementation

func findPairs(slice1 []int, sum int) [][]int {
	pairMap := make(map[int]int)
	var SliceOfPairs [][]int
	for i, v := range slice1 {
		if valuei, ok := pairMap[v]; ok {
			//fmt.Println("Pair Found", i, valuei)
			SliceOfPairs = append(SliceOfPairs, []int{i, valuei})
		} else {
			pairMap[sum-v] = i
		}
	}
	return SliceOfPairs
}

Solution 30 - Algorithm

Javascript solution:

var sample_input = [0, 1, 100, 99, 0, 10, 90, 30, 55, 33, 55, 75, 50, 51, 49, 50, 51, 49, 51];
var result = getNumbersOf(100, sample_input, true, []);

function getNumbersOf(targetNum, numbers, unique, res) {
    var number = numbers.shift();
    
    if (!numbers.length) {
        return res;
    }
    
    for (var i = 0; i < numbers.length; i++) {
        if ((number + numbers[i]) === targetNum) {
            var result = [number, numbers[i]];
            if (unique) {
              if (JSON.stringify(res).indexOf(JSON.stringify(result)) < 0) {
            	res.push(result);                
              }
            } else {
              res.push(result);
            }
            numbers.splice(numbers.indexOf(numbers[i]), 1);
            break;
        }
    }
    return getNumbersOf(targetNum, numbers, unique, res);
}

Solution 31 - Algorithm

https://github.com/clockzhong/findSumPairNumber

I did it under O(m+n) complexity cost for both time and memory space. I suspect that's the best algorithm so far.

Solution 32 - Algorithm

int [] arr = {1,2,3,4,5,6,7,8,9,0};

var z = (from a in arr from b in arr where 10 - a == b select new { a, b }).ToList;

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGinView Question on Stackoverflow
Solution 1 - Algorithmkinshuk4View Answer on Stackoverflow
Solution 2 - AlgorithmcodaddictView Answer on Stackoverflow
Solution 3 - AlgorithmRambo7View Answer on Stackoverflow
Solution 4 - AlgorithmVikram DaveView Answer on Stackoverflow
Solution 5 - AlgorithmASKNView Answer on Stackoverflow
Solution 6 - AlgorithmiamantonyView Answer on Stackoverflow
Solution 7 - AlgorithmDrone BrainView Answer on Stackoverflow
Solution 8 - Algorithmgarg10mayView Answer on Stackoverflow
Solution 9 - AlgorithmSaruView Answer on Stackoverflow
Solution 10 - AlgorithmArpit AgarwalView Answer on Stackoverflow
Solution 11 - AlgorithmLokesh BasuView Answer on Stackoverflow
Solution 12 - AlgorithmNikhil RupanawarView Answer on Stackoverflow
Solution 13 - AlgorithmobaqueiroView Answer on Stackoverflow
Solution 14 - Algorithmuser1529412View Answer on Stackoverflow
Solution 15 - AlgorithmPankaj JaiswalView Answer on Stackoverflow
Solution 16 - AlgorithmkarthikbvView Answer on Stackoverflow
Solution 17 - AlgorithmDuyen-HoaView Answer on Stackoverflow
Solution 18 - AlgorithmLiozMView Answer on Stackoverflow
Solution 19 - AlgorithmAbstractDissonanceView Answer on Stackoverflow
Solution 20 - AlgorithmcodewarriorView Answer on Stackoverflow
Solution 21 - AlgorithmSuryaView Answer on Stackoverflow
Solution 22 - AlgorithmChrishanView Answer on Stackoverflow
Solution 23 - AlgorithmShridutt KothariView Answer on Stackoverflow
Solution 24 - AlgorithmBillzView Answer on Stackoverflow
Solution 25 - AlgorithmBruce ZuView Answer on Stackoverflow
Solution 26 - AlgorithmShishir AroraView Answer on Stackoverflow
Solution 27 - AlgorithmAshwin AravindView Answer on Stackoverflow
Solution 28 - AlgorithmMetadataView Answer on Stackoverflow
Solution 29 - AlgorithmSumerView Answer on Stackoverflow
Solution 30 - Algorithmgor181View Answer on Stackoverflow
Solution 31 - AlgorithmClock ZHONGView Answer on Stackoverflow
Solution 32 - AlgorithmBhavesh LadView Answer on Stackoverflow