GithubHelp home page GithubHelp logo

kcomplementary's Introduction

KComplementary

Algorithm to find pairs in which the sum of both is equal to a given value.

Consider all possible corner cases.

e.g

a = [1, 8, -3, 0, 1, 3, -2, 4, 5]
k = 6

count = 7

a = [1, 5, 3, 4, 2]
k = 3

count = 7

a = [1, 1, 1, 1]
k = 2

count = 16 

Solution

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class KComplementary
{
    public static void main(String[] args)
    {
        int[] arr = new int[] {1, 8, -3, 0, 1, 3, -2, 4, 5};
        int k = 6;

        int result = getPairs(k, arr);
        System.out.println("result : " + result);

        arr = new int[] {1, 5, 3, 4, 2};
        k = 3;

        result = getPairs(k, arr);
        System.out.println("result : " + result);

        arr = new int[] {1, 1, 1, 1};
        k = 2;

        result = getPairs(k, arr);
        System.out.println("result : " + result);
    }

    static int getPairs(int k, int arr[])
    {
        Map<Integer, List<Integer>> map = new HashMap<>();
        int count = 0;
        for (int i = 0; i < arr.length; i++)
        {
            List<Integer> list = map.get(arr[i]);
            if (list != null)
            {
                list.add(i);
            }
            else
            {
                list = new ArrayList<>(Arrays.asList(i));
            }

            map.put(arr[i], list);

            int remain = k - arr[i];
            if (map.containsKey(remain))
            {
                System.out.print("(" + map.get(remain) + ", " + i + ")" + " ");

                if (map.get(remain).contains(i))
                {
                    count = count + 1 + (map.get(remain).size() - 1) * 2;
                }
                else
                {
                    count = count + map.get(remain).size() * 2;
                }
            }
        }
        return count;
    }
}

kcomplementary's People

Contributors

ahmad3ttallah avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.